【发布时间】:2013-06-03 11:06:49
【问题描述】:
flock() 通常是异步信号安全的,因为它是一个系统调用。它的语义使得很难以不同的方式实现它。它不在 POSIX 的 list 的异步信号安全函数中,因为它根本不在 POSIX 中。
是否可以在 sigaction 处理程序中使用flock() 而不会出现问题?
【问题讨论】:
-
flock()的 Mac OS X 文档没有提供任何直接帮助。没有理由假设flock()会与用户空间结构混淆,因此完全有理由认为它将是异步信号安全的,但这并不是决定性的。fcntl()函数,它是 POSIX 锁定系统调用,是异步信号安全的,它支持flock()可以实现的观点,因此它是异步信号安全的,但这仍然不是证据。也许你应该升级为使用fcntl(),然后你就会知道你是安全的。 -
@JonathanLeffler Cna 我使用
flock()锁定并使用fcntl()解锁? -
请在此处查看我对您最初问题的补充回答:stackoverflow.com/a/16979601/694576
-
不:你不能用
fcntl()来解锁你用flock()锁定的东西。 -
终于在这个话题上得到了答案:stackoverflow.com/questions/16988256/…