生產者-消費者模型是經典的進程同步問題。本實作採用 System V 信號量 實現互斥與同步,配合 共享記憶體 作為緩衝區,透過命令列參數區分生產者(-p)與消費者(-c)進程。
// 共享記憶體結構
typedef struct {
int buffer[8]; // 環狀緩衝區,容量 8
int count; // 當前產品數量
int in, out; // 生產/消費指標
} SharedMemory;
// 信號量聯合體(Linux 需自行定義)
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
};
$ ./a.out -p & # 後台啟動生產者
[1] 3562
$ [pid: 3562] producer is running
producer count: 0
produce data. count:1, data:1
produce data. count:2, data:2
produce data. count:3, data:3
$ ./a.out -c # 前台啟動消費者
[pid: 3563] customer is running
customer count: 3
get data. count:3, data:3
customer count: 2
get data. count:2, data:2
...