semop()失败后失败

时间:2011-12-11 11:57:35

标签: c++ semaphore

我正在尝试用C ++编写一个程序,在Ubuntu 11.10上用GCC 4.6.1编译,而IPC让我很难过。为了演示,这是我的信号量信号代码,已提供semidsemnum

struct sembuf x;

x.sem_num = semnum;
x.sem_op = 1;
x.sem_flg = SEM_UNDO;
int old_value = semctl(semid, 0, GETVAL);
if(semop(semid, &x, 1) < 0)
{
    std::cerr << "semaphore failed to signal" << std::endl;
}
else if(semctl(semid, 0, GETVAL) == old_value)
{
    std::cerr << "signal returned OK, but didn't work" << std::endl;
}

“等待”的代码类似;当然,主要区别在于sem_op设置为-1。有时我会在这里收到第一条错误信息,但是我经常会得到第二条错误信息,这对我来说毫无意义。第一个,我想我可以寻找一个错误代码(虽然我不确定这是否取决于我不应该使用的C ++ 11功能),但我不知道如何开始解决第二。重新启动不起作用。 GDB没有多大帮助,特别是当“下一步”和“步骤”似乎来回跳跃而不是按顺序前进时。

0 个答案:

没有答案