Wil*_*ban 2 c posix semaphore while-loop
我试图避免使用sem_wait,并且有类似的东西:"在等待信号量时,做一些事情".所以我发现了sem_getvalue,它应该在成功的情况下返回0.
所以我用以下方式启动信号量:
sem_init(&sem1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
而不是
sem_wait(&sem1);
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西:
while(sem_getvalue(&sem1, 2) < 0){
printf("do this\n");
}
Run Code Online (Sandbox Code Playgroud)
我对sem_wait没有任何问题,一切似乎都正常运行.但是第二个,我在执行期间遇到了Segmentation fault错误.
非常感谢任何帮助,谢谢!
你不应该使用sem_getvalue这个,因为你失去了原子性.使用sem_trywait该任务
for (;;) {
if (sem_trywait(&sem1)) {
if (errno != EAGAIN) {
/* handle error */
abort();
}
errno = 0;
printf("do this\n");
} else {
break;
}
}
Run Code Online (Sandbox Code Playgroud)