1. 程式人生 > >Linux-IPC之訊號量

Linux-IPC之訊號量

在生產者原始碼裡,首先用函式semctl()初始化訊號量集合sem_id,它包含兩個訊號,分別表示生產的數量和空倉庫的數量,那麼在消費者的程序中用相同的key值就會得到該訊號量集合;實現兩個程序之間的通訊。

在主函式裡,設定對兩個訊號量的PV操作,然後在各自的程序中對兩個訊號進行操作。

(1)如果只執行生產者程序,則生產10個之後,該程序就會因為在得不到空倉庫資源而阻塞,這個時候執行消費者程序,阻塞就會被解除;

(2)如果先執行生產者程序,生產幾個產品之後,關閉該程序,則執行消費者程序,當消費完生產的產品後,該程序就會因為在得不到產品資源而阻塞,這個時候執行生產者程序,阻塞就會被解除;

(3)如果同時執行兩個程序,由於消費比生產快,因此消費者每次都要等待生產者生產產品之後才能消費;

在每次執行程式之前,一定要先執行生產者程序先初始化訊號量。