linux中的共享信号量不发布

时间:2014-03-12 06:56:26

标签: linux posix ipc producer-consumer

我在尝试在linux中实现生产者 - 消费者问题的解决方案时遇到了问题。

我应该使用共享信号量来跨不同进程进行同步。

我理解这样发信号的替代信号量的概念(我也使用sem_open()来使信号量在两个进程中共享:

process 1
----------------------------------------------
semaphore s1 = sem_open("/s1", O_CREAT, 0666, 0);
semaphore s2 = sem_open("/s2", O_CREAT, 0666, BUFFSIZE);

sem_wait(s2);
/* do stuff */
printf("This is process 1!\n");
sem_post(s1);


process 2
----------------------------------------------
semaphore s1 = sem_open("/s1", 0);
semaphore s2 = sem_open("/s2", 0);

sem_wait(s1);
/* do stuff */
printf("This is process 2!\n");
sem_post(s2);

我遇到的问题是两个进程都陷入僵局。根据我的理解,进程1应首先进入临界区(因为信号量的初始值为BUFFSIZE),然后发出信号s1,因此进程2可以继续进行。

事实并非如此;这两个过程只是空白地坐在那里,没有输出到屏幕上。

0 个答案:

没有答案