unix高级环境编程 第二版 P328 翻译错了一个地方(第十二章 线程控制)

中文版如下图:


上面那句: 

  • 这样其他线程试图对这个互斥量的加锁就会被堵塞
是错误的,应该是同一个线程。相当与于说,同一个线程在信号处理程序之前调用了一次getenv_r,加了一次锁,然后信号来了,又在信号处理程序中调用getenv_r,又加了一次锁。那么如果不是递归锁,就会死锁。所以必须要递归锁。

另付上英文原版为证明:
If we make getenv_r thread-safe, that doesn't mean that it is reentrant with respect to signal handlers. If we use a nonrecursive mutex, we run the risk that a thread will deadlock itself if it calls getenv_r from a signal handler. If the signal handler interrupts the thread while it is executing getenv_r, we will already be holding env_mutex locked, so another attempt to lock it will block, causing the thread to deadlock. Thus, we must use a recursive mutex to prevent other threads from changing the data structures while we look at them, and also prevent deadlocks from signal handlers. The problem is that the pthread functions are not guaranteed to be async-signal safe, so we can't use them to make another function async-signal safe.



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值