生产者源码:
消费者源码:
在生产者源码里,首先用函数semctl()初始化信号量集合sem_id,它包含两个信号,分别表示生产的数量和空仓库的数量,那么在消费者的进程中用相同的key值就会得到该信号量集合;实现两个进程之间的通信。
在主函数里,设定对两个信号量的PV操作,然后在各自的进程中对两个信号进行操作。
(1),如果只运行生产者进程,则生产100个之后,该进程就会因为在得不到空仓库资源而阻塞,这个时候运行消费者进程,阻塞就会被解除;
(2),如果先运行生产者进程,生产几个产品之后,关闭该进程,则运行消费者进程,当消费完生产的产品后,该进程就会因为在得不到产品资源而阻塞,这个时候运行生产者进程,阻塞就会被解除;
(3),如果同时运行两个进程,由于消费比生产快,因此消费者每次都要等待生产者生产产品之后才能消费;
在每次运行程序之前,一定要先运行生产这进程先初始化信号量。