在UNIX® System Threads Reference中,在“线程安全”标题下的一系列函数“不保证在所有UNIX系统上都是线程安全的”。此列表中不存在函数scandir(),而列表中显示readdir()。
然而,scandir()的glibc source显然似乎调用了readdir(),而不是线程安全的readdir_r()。因为某些其他原因,scandir()在列表中被省略了,或者由于某种原因我是否缺少线程安全?
答案 0 :(得分:1)
我认为,此列表仅涵盖POSIX功能。 scandir(3)
是BSD / SVID,因此可能不会列在那里。新的线程安全函数可能是此列表的重点,但不列出旧的,线程不安全的函数。
答案 1 :(得分:1)
似乎POSIX.1-2008指定scandir()
是线程安全的,因为它是POSIX.1-2008 function,而不是允许非线程安全的函数列表。但是,POSIX.1-2008并不排除readdir()
是线程安全的,而在glibc的情况下,readdir()
source实际上是线程安全的,因为它不返回全局struct dirent
,而是返回DIR
调用中返回的opendir()
类型的glibc-defined成员。
即使glibc的scandir()
调用readdir()
,它仍然看起来是线程安全的。