我怎么知道Linux系统调用是否是线程安全的?

Ten*_*hao 1 c linux multithreading system-calls thread-safety

linux中的某些功能由_r标记为“线程安全”(例如gmtime_r),但是大多数系统调用未标记,并且在联机帮助页中也未提及。所以我的问题是:我如何知道Linux syscall是否是线程安全的?谢谢!

tbe*_*ert 5

我认为您的意思是“图书馆职能”;依靠对线程的内核数据进行操作,系统调用应该是线程安全的。

答案是:检查手册页中所涉及的功能。“ _r”变体专门为不可重入的函数提供,这意味着传递给它们的额外参数是在非“ _r”版本中静态声明和修改的。

大部分glibc应该是IIRC线程安全的,但是您始终需要检查手册页。或者,如果您不信任这些代码,则为代码本身。没有什么灵丹妙药可以使您免去理解要针对其编程的接口的责任。