【问题标题】:Will this producer-consumer scenario with semaphores ever deadlock?这种带有信号量的生产者-消费者场景是否会陷入僵局?
【发布时间】:2018-07-15 17:29:15
【问题描述】:

我已经阅读了一大堆使用信号量的生产者-消费者问题,但我无法找到确切的答案。我想知道的是这个解决方案是否会死锁?

semaphore loadedBuffer = 0
semaphore emptyBuffer = N where n>2
semaphore mutex = 1

Producer(){
    P(emptyBuffers)
    P(mutex)
    //load buffer
    V(loadedBuffers)
    v(mutex)

Consumer(){
    P(loadedBuffer)
    P(mutex)
    //empty buffer
    V(mutex)
    v(emptyBuffer)

我确实相信这是一个很好的解决方案,因为我找不到导致死锁的情况,因为任何时候使用互斥信号量,线程都不可能在等待其他任何东西。

我是否正确地假设这是一个很好的解决方案并且永远不会陷入僵局?

【问题讨论】:

    标签: deadlock semaphore producer-consumer


    【解决方案1】:

    不清楚您的算法中的 P()V()v() 是什么,但通常您只需要 Wikipedia 中描述的两个信号量:

    semaphore fillCount = 0; // items produced
    semaphore emptyCount = BUFFER_SIZE; // remaining space
    
    procedure producer() 
    {
        while (true) 
        {
            item = produceItem();
            down(emptyCount);
            putItemIntoBuffer(item);
            up(fillCount);
        }
    }
    
    procedure consumer() 
    {
        while (true) 
        {
            down(fillCount);
            item = removeItemFromBuffer();
            up(emptyCount);
            consumeItem(item);
        }
    }
    

    来源:https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem#Using_semaphores

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-19
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      相关资源
      最近更新 更多