【问题标题】:readers-writers ( readers starvation )读者 - 作家(读者饥饿)
【发布时间】:2015-01-19 01:40:40
【问题描述】:

它在维基百科中说,下面的代码“添加了不允许任何线程饿死的约束”,我不明白为什么没有饿死。 例如:如果有很多作者在任何读者之前到达并且第一个作者花了很长时间才完成他的写作,那么 r 可能会达到一些大的负数,比如说 -12345 并且在它之后读者开始与作者一起到达,并且不知何故,操作系统总是选择写入器而不是读取器来获取信号量,在这种情况下,读取器会饿死,这是对还是我错了? 链接:readers-writers problem

查看链接中的第三个读写器问题。

代码:

int readcount; // (initial value = 0)
semaphore mutex_rdcnt, r, w; // ( initial value = 1 ) 
//READER
    wait(r);
      wait(mutex_rdcnt);
        readcount++;
        if (readcount == 1)
          wait(w);
      signal(mutex_rdcnt);          
    signal(r);

    // reading is performed 

    wait(mutex_rdcnt);
      readcount--;
      if (readcount == 0)
        signal(w);
    signal(mutex_rdcnt);  
//WRITER
    wait(r);
    wait(w);

     // writing is performed

    signal(w);  
    signal(r);

【问题讨论】:

    标签: operating-system semaphore


    【解决方案1】:

    发现问题: 请注意,该解决方案仅当且仅当信号量在阻塞和释放线程时保持先进先出顺序时,才能满足“不允许线程饥饿”的条件。 否则,例如,一个被阻塞的写入器可能会无限期地保持阻塞状态,而其他写入器会在它可以之前递减信号量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多