【发布时间】:2015-11-16 17:56:15
【问题描述】:
我正在尝试将POSIX counting semaphore 用作binary semaphore?
为此,我编写了以下代码
sem = sem_open(argv[optind], flags, perms, 1); // Initialising semaphore to 1
while(sem_getvalue(sem) > 0)
{
continue;
}
sem_post(sem);
还有其他方法可以将计数信号量用作二进制信号量吗?在这里,如果在 while lopp 被评估为 false 之后立即发生 comtext 切换,但尚未调用 sem_post,那么在这种情况下不会导致竞争条件吗?对于我想要实现的目标,还有其他更好的选择吗?
我有多个进程与信号量同步。我知道这段代码不能保证一个场景,在 sem_getvalue 期间,即使sem 值变为零,甚至在调用特定进程中的 sem_post 之前,anotehr 进程也可能调用 sem_post,导致值为 2。如何这种情况是可以解决的。
互斥锁无法解决我的问题,因为在我的问题中,有些进程仅用于信号,即sem_post 操作,与互斥锁不同,所有进程都将不断等待和发出信号
【问题讨论】:
-
可能duplicate.
标签: c linux posix ipc semaphore