簡體   English   中英

解鎖衛士(或boost :: reverse_lock)是反模式嗎? 為什么?

[英]Is unlock guard (or boost::reverse_lock) a anti-pattern? Why?

是否存在與解鎖衛士有關的已知問題:

 unique_lock<mutex> lock(smtx); 

 // ... 

 { // non locked block 
     reverse_lock< unique_lock<mutex> > rlock(lock); 

     // ...
 } // locked again 

 // ... 

可以使這通常成為反模式嗎?

建議在我的代碼審查之一中避免使用此方法,而無需明確說明原因。

不確定是否是反模式。 雖然我更願意在可能的情況下使用范圍鎖定,但是使用條件變量時,使用純范圍鎖定並不容易。

在以下情況下,我使用reverese_lock:

void WorkQueue::Run()
{
    boost::unique_lock<boost::mutex> lck(m_mtxQueue);

    for (;;)
    {
        // wait for an item to be pushed
        while (m_deqItems.empty())
        {
            m_cvAvailable.wait(lck);
        }

        // signal worker thread(s) to process items
        if (!m_deqItems.empty())
        {
            Item item = m_deqItems.front();
            m_deqItems.pop_front();


            // unlock during (lengthy) processing of an item
            boost::reverse_lock<boost::unique_lock<boost::mutex>> unlck(lck);

            ProcessItem(item);
        }
    }
}

暫無
暫無

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

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