diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..779267e Binary files /dev/null and b/.DS_Store differ diff --git a/Operating Systems.md b/Operating Systems.md index 805f8f2..8e50ddf 100644 --- a/Operating Systems.md +++ b/Operating Systems.md @@ -98,7 +98,38 @@ wait操作:执行wait操作的进程进入条件变量链末尾,唤醒紧急 生产者-消费者问题 > 问题描述:使用一个缓冲区来存放数据,只有缓冲区没有满,生产者才可以写入数据;只有缓冲区不为空,消费者才可以读出数据 - +> +> ```c +> // 伪代码描述 +> // 定义信号量 full记录缓冲区物品数量 empty代表缓冲区空位数量 mutex为互斥量 +> semaphore full = 0, empty = n, mutex = 1; +> +> // 生产者进程 +> void producer(){ +> do{ +> P(empty); +> P(mutex); +> // 生产者进行生产 +> V(mutex); +> V(full); +> }while(1); +> } +> +> void consumer(){ +> do{ +> P(full); +> P(mutex); +> // 消费者进行消费 +> V(mutex); +> V(empty); +> }while(1); +> } +> +> ``` +> +> +> +>
哲学家就餐问题