C++ sem_wait()失败,错误为:success

C++ sem_wait()失败,错误为:success,c++,process,synchronization,posix,semaphore,C++,Process,Synchronization,Posix,Semaphore,尝试使用信号量在unix上同步进程时,sem\u wait()失败,错误为“success” 我有3个进程,每个进程运行相同的代码: while( sem_wait( &sem ) == -1 ); if( errno != EINTR ) { perror("Failed to lock semaphore"); } /* critical section */ while( sem_post( &sem ) < 0 ) {

尝试使用信号量在unix上同步进程时,
sem\u wait()
失败,错误为“success”

我有3个进程,每个进程运行相同的代码:

while( sem_wait( &sem ) == -1 );
    if( errno != EINTR )
    {
        perror("Failed to lock semaphore");
    }
/* critical section */
while( sem_post( &sem ) < 0 )
    {
        perror("Failed to unlock semaphore");
    }

sem\u wait()
是否失败?如果是,为什么会说“success”?

第一个while()循环条件末尾的分号是故意的吗?因为使用分号,除非sem_wait返回-1以外的值(即直到它成功),否则您不会退出(空体)while循环@JeremyFriesner噢,天哪,我不敢相信我犯了那个错误!太尴尬了。。。好吧,这就是当你连续5小时不间断地编写代码时会发生的情况。请查看“man sem_wait”。此函数在成功时返回0,因此您不应该旋转并等待-1。此外,您没有显示sem_init()或sem_open()调用,因此我们无法判断信号量是否共享,也无法判断初始值是什么。您可能需要显示更多的代码。我认为您的代码在等待扫描电镜时旋转是不寻常的。IMHO,一个简单的if子句更合适。您只需要在未成功时处理错误,因此“if(success!=sem_wait(&sem)){};//else继续正常flow@DOUGLASO.MOEN谢谢,但是问题是分号,正如Jeremy指出的。while循环的原因是在信号量失败时继续尝试锁定信号量,除非捕获到中断。这不是一种正确的方法吗?
Failed to lock semaphore: Success
Failed to lock semaphore: Success
Failed to lock semaphore: Success