在 OS 第6 章中討論 Processes Synchronization 的問題,其中 Monitor 是一種 解決 Processes Synchronization 問題的程式結構,主要是利用 Semaphore 的機制來處理 critical section 的問題,而因為某些 threads 在 Monitor 中被執行,不僅是將資料 lock 住就可以了,有些時候必須要 Condition Variable 來限制某些條件之下,才能存取資料,在[1]中舉了一個例子,就是「某個 thread 如果要從 stack 中讀取 data,如果 stack 中沒有 data 就必須等待 data 被 push 到 stack 中」。
在上述這種情況下,僅僅是使用 mutual exclusion 是不能夠滿足特殊條件下的需求,於是有 condition variable 的變數設定,引用[1]程式的例子如下:
do
{
boost::mutex::scoped_lock guard(m_lock);
.....
m_condition.wait(m_lock);
} while (some condition);
完成條件叫醒等待中的執行緒
{
boost::mutex::scoped_lock guard(m_lock);
.....
m_condition.notify_one(m_lock);
}
--------------------------------------------------------------------
[1] http://yumei.homeip.net/blog/index.php?m=08&y=09&d=25&entry=entry090825-091626&category=18
[2]
在上述這種情況下,僅僅是使用 mutual exclusion 是不能夠滿足特殊條件下的需求,於是有 condition variable 的變數設定,引用[1]程式的例子如下:
do
{
boost::mutex::scoped_lock guard(m_lock);
.....
m_condition.wait(m_lock);
} while (some condition);
完成條件叫醒等待中的執行緒
{
boost::mutex::scoped_lock guard(m_lock);
.....
m_condition.notify_one(m_lock);
}
--------------------------------------------------------------------
[1] http://yumei.homeip.net/blog/index.php?m=08&y=09&d=25&entry=entry090825-091626&category=18
[2]
留言
張貼留言