* _r UNIX调用是可重入的(异步信号安全),线程安全还是两者兼而有之?

时间:2013-08-12 23:48:32

标签: linux multithreading unix concurrency call

重入和线程安全函数存在差异,我不知道以_r结尾的Linux函数是否是线程安全的,可重入的(我的意思是异步信号安全)或两者兼而有之,

1 个答案:

答案 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。