簡體   English   中英

每個鎖具有多個條件變量的意義?

[英]Point of having more than one condition variable per lock?

我目前正在學習並發。 我了解鎖和條件變量的作用,但是在什么情況下每個鎖想要一個以上的條件變量?

條件變量實際上是進程可以在其上等待(不消耗資源)的隊列。 之所以這樣做,是因為它們只有在滿足特定條件時才可以繼續(因此命名)。 當不同種類的過程必須等待不同條件成立時,多個條件變量可能會有用。 一個很好的例子就是所謂的生產者-消費者問題( http://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem ),當兩種進程共享一個公共的FIFO緩沖區時,生產者將物品存入其中,消費者將它們提取出來。 生產者有時需要等待,直到緩沖區中至少有1個空插槽才能將某項放入其中。 同樣,當緩沖區為空時,使用者可能必須等待。 這兩種過程相互發出信號:生產者存放商品時,它向消費者發出緩沖區不為空的信號。 當消費者提取物品時,它會向生產者發出緩沖區未滿的信號。 盡管僅使用一個條件變量來解決問題並不是不可能的,但使用兩個條件變量更為自然(高效):一個用於生產者,一個用於消費者。

存在其他一些需要類似方法的“問題”,例如,讀者-作家和熟睡的理發師。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM