not*_*ser 15 c multithreading glibc thread-safety
在哪里可以获得明确的答案,我memcpy(使用Ubuntu附带的eglibc实现)是否是线程安全的? - 老实说,我真的没有在文档中找到明确的YES或NO.
顺便说一句,对于"线程安全",我的意思是,memcpy只要同时复制字节的日期字节是安全的,就可以安全地同时使用.至少如果将只读数据复制到不重叠的区域,这应该是可能的.
理想情况下,我想看到类似的名单在底部此页面中ARM编译器的文档.
nos*_*nos 13
您可以在以下章节找到该列表2.9.1 Thread-Safety:http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_01
也就是说,这是在那个POSIX没有功能的列表并不需要是线程安全的.所有其他功能都必须是线程安全的.Posix包括标准C库和典型的"unix"接口.(完整列表,http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html)
memcpy()由posix指定,但不是2.9.1中列表的一部分,因此可以认为是线程安全的.
Linux上的各种环境至少试图尽可能地实现posix - 即使posix不要求它,linux/glibc上的函数也可能是线程安全的 - 虽然这很少被记录.对于其他函数/库而不是posix所涵盖的内容,您将留下作者所记录的内容......
据我所知,posix将线程安全等同于重入,并保证没有内部数据竞争.但是,您负责可能的外部数据争用 - 例如保护自己不要使用可能同时更新的内存调用例如memcpy().
这取决于功能,以及您如何使用它。
举个例子memcpy,它通常是线程安全的,如果你复制源和目标都是单个线程私有的数据。如果您写入可以由另一个线程读取/写入的数据,则它不再是线程安全的,您必须保护访问。