操作系统13 [新] 3_3信号量及其操作.pdfVIP

  • 3
  • 0
  • 约1.99万字
  • 约 59页
  • 2020-09-14 发布于广西
  • 举报
3.3 信号量与PV操作 同步与同步机制 信号量与PV操作 信号量实现互斥 哲学家就餐问题 生产者-消费者问题 读-写者问题 理发师问题 同步与同步机制 信号量与PV操作 信号量实现互斥 哲学家就餐问题 生产者-消费者问题 读-写者问题 理发师问题 3.3.1 同步和同步机制 • 生产者 • 计算进程 • 发送进程 • 消费者 • 打印进程 • 接收进程 3.3.1 同步和同步机制 1. int k; 2. typedef anyitem item; 3. item buffer[k]; //shared by producers and consumers 4. int in; //shared by producers 5. int out; //shared by consumers 6. int counter; //shared by producers and consumers 3.3.1 (例) process producer () 1. while (true) { 2. {produce an item in nextp} 3. if (counter == k) sleep(producer); 4. buffer[in] = nextp ; 5. in = (in + 1)%k; 6. counter++; 7. if(counter==1) wakeup(consumer); 8. } 3.3.1 (例) process consumer () 1. while (true) { 2. if (counter == 0) sleep(consumer); 3. nextc = buffer[out]; 4. out = (out+1)%k; 5. counter-- ; 6. if(counter == (k-1)) wakeup(producer); 7. {consume the item in nextc} 8. } 3.3.1 (例):竞争错误 P1 P2 1. while (true) { while (true) { 2. {produce an “A” in nextp} 3. {produce an “B” in nextp} 4. if (counter == k) sleep(producer); 5. buffer[in] = nextp ; //buffer[0] = “A” 6. if (counter == k) sleep(producer); 7. buffer[in] = nextp ; //buffer[0] = “B” 8. in = (in + 1)%k; //in = 1 9. in = (in + 1)%k; //in = 2 10. counter++; //counter = 1 11. counter++; //counter = 2 12. if(counter==1) wakeup(consumer); 13. if(counter==1) wakeup

文档评论(0)

1亿VIP精品文档

相关文档