我在尝试在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可以继续进行。
事实并非如此;这两个过程只是空白地坐在那里,没有输出到屏幕上。