簡體   English   中英

使用Writer模塊的Boost中的多讀取器,單寫入器鎖定

[英]Multiple-Reader, Single-Writer Lock in Boost WITH Writer Block

答案在這里 幾乎是我想要做什么。

我想要一個讀寫鎖,它將:

  1. 只要沒有作家,就允許讀者采取鎖定措施
  2. 如果作者嘗試使用該鎖,請阻止新讀者使用它,但允許老讀者在給作者鎖之前完成操作
  3. 一旦作者解除鎖定,請允許新讀者

上面的實現不符合條件(2)。 它允許新的讀者抓住鎖並阻止作家,直到他們完成。

找到了。 我需要unique_lock而不是upgrade_to_unique_lock

boost::shared_mutex _access;
void reader()
{
    // get shared access
    boost::shared_lock<boost::shared_mutex> lock(_access);
}

void writer()
{
    // wait for old shared access readers to finish
    // but block out new shared access readers
    boost::unique_lock<boost::shared_mutex> uniqueLock(_access);
}

但是,這里的“ writer”方法沒有“ lock”屬性。 您是說在“ unique_lock”之前您還需要進行“ upgrade_lock”嗎? 就像是:

void writer()
{
    // get upgradable access
    boost::upgrade_lock<boost::shared_mutex> lock(_access);

    // get exclusive access
    boost::unique_lock<boost::shared_mutex> uniqueLock(lock);
    // now we have exclusive access
}

還是您混合了屬性,應該是:

void writer()
{
    boost::unique_lock<boost::shared_mutex> uniqueLock(_access);
    // now we have exclusive access
}

暫無
暫無

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

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