1

我正在阅读 Abraham Silberschatz 等人的教科书操作系统概念。我发现乳清几乎在进程同步一章中对所有需要同步的进程使用了​​ while(TRUE) 循环。其中一些对我来说很有意义,例如用餐哲学家问题使用 while(TRUE) 循环,因为哲学家需要一直“思考”,所以它的过程需要做一个 while(TRUE) 循环来模拟这一点。但其中一些对我来说没有意义。我们以读写器问题为例,教科书中给出的示例代码将读写器进程都放在了一个while循环中。

为什么?为什么阅读器进程会在之后读取某些内容?为什么他们在阅读了想要阅读的内容后不直接完成/退出?据我了解,他们这样做是为了简单地模拟同时运行多个相同的进程吗?

// solution code of the textbook for first reader-writer problem

// writer process
do {
   wait(wrt);
   // writing is performed
   signal(wrt);
}while(TRUE)

// reader process
do {
  wait(mutex);
  readCount++;
  if(readCount==1)
     wait(wrt);
  signal(mutex);
  //reading is performed
  wait(mutex);
  readCount--;
  if(readCount==0)
    singal(wrt);
  signal(mutext);

}while(TRUE)
4

1 回答 1

2

使用while (true)是表示无限循环的好主意(前提是特定语言没有表示无限循环的特殊结构),因为当从上到下阅读源代码时,读者会立即知道发生了什么。

在读取器/写入器或消费者/生产者场景中使用无限循环看起来也很合理。通常,一个软件(或其组件)被设计为重复执行某项任务。要找出在特定情况下选择无限循环的原因,需要对场景有更详细的了解。

于 2013-05-13T15:28:20.493 回答