2013-10-09 33 views
0

我正在检查semop()函数,并且结构sembuf的标志值可能是SEM_UNDO或IPC_NOWAIT。所以在我们将标志值作为0的情况下,那么行为是什么?我读过的地方是没有操作的。那是什么意思?谁能解释一下?在POSIX semop()参数中,sem_flg = 0的含义是什么

+0

做什么都不是意味着它将会无限期地等待(使进程挂起),或者它会在一段时间后开始工作? – anand

+0

如您在文章中指出的那样,'sem_flg'包含几个不同的位,如果这些位是零,那么无论ma “semop”的年度页面表示在设置这些位时不会发生。这就是“无所事事”的意思。这不是一个“semop”什么都不会做。这表示它所代表的标志不会被激活。 – lurker

+0

谢谢,有没有什么办法可以使这个活动。其实我试过这个使用代码,当我按Ctrl + C第一次代码停止执行,但是当我第二次运行它只是挂起过程。我已经把它作为守护进程。我需要重新启动机器或重新启动守护程序才能使其工作。任何想法 ? – anand

回答

1

要做的最好的事情是阅读规范 - POSIX规范semop()解释了这一切。

如果标志为0,则表示操作可能导致进程挂起等待信号量变为可用(如果标志包含IPC_NOWAIT,则不会挂起),并且这也意味着信号量值将会如果进程崩溃(如果标志包括SEM_UNDO,系统会记录必要的信息以撤消信号操作) 是否认为安全与否取决于您自己。

相关问题