重入和线程安全函数存在差异,我不知道以_r结尾的Linux函数是否是线程安全的,可重入的(我的意思是异步信号安全)或两者兼而有之,
答案 0 :(得分:2)
它们是线程安全的。
Stevens/Rago APUE教导线程安全函数(可由多个线程调用重入)和异步信号安全函数(信号处理程序可重入)之间的区别,因此可以从内部安全地调用信号处理程序)。
APUE ch 12.5 Reentrancy 列出〜79个非线程安全的函数,然后~11具有 可重入的等价物,那些是* _r函数。这意味着那些11可以同时由多个线程调用。
APUE ch 10.6 可重入函数列出~135个异步信号安全函数。它们在需要时阻止信号传递。因此,您可以在信号处理程序代码中使用它们。注意,async-signal-safeness仅在函数在信号处理程序中调用时才有意义。这可能会激励人们不要编写信号处理程序代码,因为进一步的细节很棘手。
Kerrisk TLPI ch 21 信号:信号处理程序有自己的函数表,它们是异步信号安全的。有趣的是,它与APUE并不完全相同。
这些引用中没有一个* ._ r被列为async-signal-safe。