我正在研究一些使用pthread和信号量库的代码.该sem_init功能在我的Ubuntu机器上运行正常,但在OS X上该sem_init功能完全没有效果.图书馆有什么问题,或者有不同的方式吗?这是我用来测试的代码.
sem_t sem1;
sem_t sem2;
sem_t sem3;
sem_t sem4;
sem_t sem5;
sem_t sem6;
sem_init(&sem1, 1, 1);
sem_init(&sem2, 1, 2);
sem_init(&sem3, 1, 3);
sem_init(&sem4, 1, 4);
sem_init(&sem5, 1, 5);
sem_init(&sem6, 1, 6);
Run Code Online (Sandbox Code Playgroud)
值似乎是随机数,并且在sem_init调用后它们不会更改.
我正在研究一个我们必须使用信号量来解决的问题.我有一个数组,其中包含两个信号量,gsem并给出一定的条件调用sem_wait(&(gsem[me])),这应该等到特定进程被唤醒.但是,出于某种原因,它给了我错误Bad file descriptor.我向上看sem_wait,Open Group规范说这不是错误sem_wait导致的.这让我的整个程序变得疯狂,我不知道为什么会失败.
编辑:违规代码,根据要求.
120 sem_wait(&mutex);
121 if (inside[opp] > 0 || waiting[opp] > 0) {
122 sem_wait(&screen);
123 printf("%s %u waiting\n", names[me], t);
124 sem_post(&screen);
125 waiting[me]++;
126 sem_post(&mutex);
127 int hg = sem_wait(&(gsem[me]));
128 if (hg < 0)
129 printf("%s\n", strerror(errno));
130 }
Run Code Online (Sandbox Code Playgroud)
我应该注意这是一项家庭作业,我们需要使用信号量.教授称之为"男女皆宜的浴室".男人和女人都可以使用它,但不能同时使用它.inside[opp]是浴室里异性的人数.waiting[opp]是等待使用它的异性的数量.screen是一个锁定访问权限的信号量stdout.该解决方案基于我们的教科书中使用传递接力棒的读者/作者问题的解决方案.
我还应该注意,我们首先必须在Ada中编写解决方案,然后将其转换为C.我的Ada解决方案有效,我逐字翻译.我确定这是一些小的语法细节.最后,我正在研究Snow Leopard,如果有帮助的话.