相关疑难解决方法(0)

OS X上的sem_init

我正在研究一些使用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调用后它们不会更改.

c macos semaphore pthreads

54
推荐指数
2
解决办法
3万
查看次数

C信号量:sem_wait抛出莫名其妙的错误

我正在研究一个我们必须使用信号量来解决的问题.我有一个数组,其中包含两个信号量,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,如果有帮助的话.

c semaphore

1
推荐指数
1
解决办法
3320
查看次数

标签 统计

c ×2

semaphore ×2

macos ×1

pthreads ×1