3

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

4

1 回答 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 回答