我正在检查semop()
函数,结构sembuf
的标志值可以是SEM_UNDO或IPC_NOWAIT。那么在我们将标志值传递为0的情况下,那么行为是什么?在某处我读到它是一个无操作。那是什么意思?谁能解释一下?
答案 0 :(得分:1)
最好的办法是阅读规范 - semop()
的POSIX规范解释了这一切。
如果标志为0,则表示该操作可能导致进程挂起,等待信号量变为可用(如果标志包含IPC_NOWAIT
,它不会挂起),这也意味着如果进程崩溃,则不会调整信号量值以撤消操作(如果包含SEM_UNDO
标志,系统将记录撤消信号量操作所需的信息。
这是否安全取决于你。