2012-01-24 27 views
10
vấn đề

Nhà sản xuất-tiêu dùng lấy từ Wikipedia:Nhà sản xuất-tiêu dùng với sempahores

semaphore mutex = 1 
semaphore fillCount = 0 
semaphore emptyCount = BUFFER_SIZE 

procedure producer() { 
    while (true) { 
     item = produceItem() 
     down(emptyCount) 
      down(mutex) 
       putItemIntoBuffer(item) 
      up(mutex) 
     up(fillCount) 
    } 
    up(fillCount) //the consumer may not finish before the producer. 
} 

procedure consumer() { 
    while (true) { 
     down(fillCount) 
      down(mutex) 
       item = removeItemFromBuffer() 
      up(mutex) 
     up(emptyCount) 
     consumeItem(item) 
    } 
} 

Câu hỏi của tôi - tại sao nhà sản xuất có up(fillCount) //the consumer may not finish before the producer sau khi vòng lặp while. Khi nào chương trình sẽ đến đó và tại sao nó lại cần thiết?

Trả lời

5

Tôi nghĩ rằng mã không có ý nghĩa theo cách này. Các vòng lặp không bao giờ kết thúc, do đó, dòng trong câu hỏi có thể không bao giờ đạt được.

Mã ban đầu không chứa dòng đó và là added by an anonymous editor in March 2009. I removed that line now.

Nói chung, mã trên Wikipedia thường được nhiều người chỉnh sửa trong một khoảng thời gian dài, do đó rất dễ dàng để đưa các lỗi vào đó.

Các vấn đề liên quan