Drive for better visionMutex, RWLock, ConditionFebruary, 2012                         Himax Media                         ...
Mutex 概述      利用 linux pthread library 來實作      讓兩個 thread 存取同一資源時避免衝突                                                  ...
Mutex member function             lock()                   取得互斥鎖,如果被其他人占用,會進入睡眠             unlock()                  ...
Mutex::Autolock 概述             在函式的開頭定義物件,會自動呼叫 constructor              Mutex::Autolock _l(mutex);                   Mu...
RWLock 概述           允許一個 writer 或多個 reader 同時存取           readLock()                   當有 writer 在存取時,會被擋住,直到 writer 解鎖...
Condition 概述           Condition 採用生產者 / 消費者模型,生產者提供資料,並告            訴消費者可以去使用資料           wait(mutex)                 ...
Condition: producer             Vector<int> data;                   這個變數會被生產者 / 消費者同時存取             Mutex mLock; Condit...
Condition: consumer             Vector<int> data;                   這個變數會被生產者 / 消費者同時存取             Mutex mLock; Condit...
Example                                       cond.signal()                 mLock.lock()                                  ...
Drive for better vision
Upcoming SlideShare
Loading in...5
×

04 mutex rw_lock_condition

1,216

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,216
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

04 mutex rw_lock_condition

  1. 1. Drive for better visionMutex, RWLock, ConditionFebruary, 2012 Himax Media Solutions 承景科技股份有限公司
  2. 2. Mutex 概述  利用 linux pthread library 來實作  讓兩個 thread 存取同一資源時避免衝突 k bl oc mutex.lock() mutex.lock() access resource sleep mutex.unlock() access resourceHimax Media Solutions Proprietary & Confidential 2
  3. 3. Mutex member function  lock()  取得互斥鎖,如果被其他人占用,會進入睡眠  unlock()  釋放互斥鎖  trylock()  取得互斥鎖,如果被其他人占用,會馬上傳回錯誤值  EBUSY: 正被占用  EINVAL: 這個鎖還沒有初始化Himax Media Solutions Proprietary & Confidential 3
  4. 4. Mutex::Autolock 概述  在函式的開頭定義物件,會自動呼叫 constructor Mutex::Autolock _l(mutex);  Mutex& _l.mLock = mutex;  _l.mLock.lock();  在函式結束時,會呼叫 destructor  _l.mLock.unlock();Himax Media Solutions Proprietary & Confidential 4
  5. 5. RWLock 概述  允許一個 writer 或多個 reader 同時存取  readLock()  當有 writer 在存取時,會被擋住,直到 writer 解鎖才能進入  當有 reader 在存取時,可以直接進入  reader 的數量沒有限制  writeLock()  當有 writer 存取時,會被擋住,直到 writer 解鎖才能進入  當有 reader 存取時,會被擋住,並限制新的 reader 進入,直到現 有的 reader 全部解鎖才能進入  unlock()Himax Media Solutions Proprietary & Confidential 5
  6. 6. Condition 概述  Condition 採用生產者 / 消費者模型,生產者提供資料,並告 訴消費者可以去使用資料  wait(mutex)  喚醒後 mutex 會重新被上鎖  要先準備一個已上鎖的 mutex ,所有生產者 / 消費者都能使用  將 mutex 解鎖後,消費者進入睡眠,直到被生產者喚醒  waitRelative(mutex, reltime)  與 wait() 的大致相同,除了進入睡眠時間 reltime 會自動被喚醒  signal()  喚醒至少一個消費者 ( 但不保證只喚醒一個 )  broadcast()  喚醒所有消費者Himax Media Solutions Proprietary & Confidential 6
  7. 7. Condition: producer  Vector<int> data;  這個變數會被生產者 / 消費者同時存取  Mutex mLock; Condition cond;  mLock.lock();  data.insert(...);  cond.signal();  mLock.unlock()Himax Media Solutions Proprietary & Confidential 7
  8. 8. Condition: consumer  Vector<int> data;  這個變數會被生產者 / 消費者同時存取  Mutex mLock; Condition cond; mLock.lock()  mLock.lock(); data.size()??  while(data.size() == 0) mLock.lock() mLock.unlock()  cond.wait(mLock); wake up sleep  n = data.remove(...)  mLock.unlock() mLock.unlock()Himax Media Solutions Proprietary & Confidential 8
  9. 9. Example cond.signal() mLock.lock() mLock.lock() data.size()?? data.size()?? A B mLock.lock() mLock.unlock() mLock.lock() mLock.unlock() wake up wake up sleep sleep mLock.unlock() mLock.unlock()Himax Media Solutions Proprietary & Confidential 9
  10. 10. Drive for better vision

×