2011-08-25 28 views
1

所以我有像read這樣的功能,可以從多個線程同時調用。但我也有一個功能write,需要鎖定所有read功能。哪裏可以找到創建這種構架的例子?可變boost :: mutex是否可以分開鎖定和等待函數?

我得到,我們可以有:

mutable boost::mutex the_read_mutex; 
mutable boost::mutex the_write_mutex; 

和:

void write() 
{ 
    // make all new readers wait and wait for all other currently running read threads(); 
} 

void read() 
{ 
    // do not make all new readers wait, and wait for all currently running write thread() 
} 

那麼如何做這樣的事?

回答

4

您可以使用

boost::shared_mutex m 

Reader() 
shared_lock lock(m) 

Writer() 
upgradeable_lock lck(m) 
upgrade_to_unique_lock uniqueLock(lck); 

爲了更多地瞭解升壓鎖:Boost thread sync mechanisms

瞭解的類,你正在處理的問題:Wikpedia Link to Reader-WriterLock

要知道更多關於POSIX讀寫器鎖,它可以直接爲讀者提供簡單的語法寫入鎖:POSIX reader-witer locks

+0

讀者不會介入ck彼此? – Rella

+0

@ kabumbus:這就是SHARED鎖的原因。 :)多於一個讀卡器可以採用相同的shared_lock而不被阻塞。 –

+0

@Kabumbus讀寫器鎖實現背後的全部想法是允許讀者併發訪問,但是如果任何作者需要訪問,必須等到所有其他讀者或任何作者放棄了資源的所有權。另外,作者擁有所有權時,讀者和作者都不會被授予訪問權限。 – Praetorian

相關問題