可重入和线程安全函数存在差异,我不知道以 _r 结尾的 Linux 函数是线程安全的、可重入的(我的意思是异步信号安全的)还是两者兼而有之,
问问题
552 次
1 回答
3
它们是线程安全的。
Stevens/Rago APUE教授线程安全函数(相对于被多个线程调用可重入)和异步信号安全函数(相对于信号处理程序可重入,因此可以从信号处理程序内安全调用)之间的区别.
APUE ch 12.5 Reentrancy列出了 ~79 个非线程安全的函数,然后 ~11 个具有可重入的等效函数,它们是 *_r 函数。这意味着这 11 个线程可以同时被多个线程调用。
APUE ch 10.6 Reentrant Functions列出了大约 135 个异步信号安全的函数。它们在需要时阻止信号传递。因此,您可以在信号处理程序代码中使用它们。请注意,异步信号安全性仅在信号处理程序中调用函数时才重要。这可能会促使人们不编写信号处理程序代码,因为进一步的细节很棘手。
Kerrisk TLPI ch 21 Signals:Signal Handlers有自己的异步信号安全函数表。有趣的是,它与 APUE 并不完全相同。
这些引用中的任何一个都没有将 *._r 列为异步信号安全。
于 2013-08-13T02:49:52.607 回答