簡體   English   中英

即使鎖定失敗,具有try_to_lock的unique_lock是否應擁有互斥鎖?

[英]Should unique_lock with try_to_lock owns the mutex even if lock fails?

以下代碼在VS2012 Express和gcc 4.7.2中產生了不同的輸出,這是ideone使用的輸出。 為了記錄在案,我試着用MinGW的編譯,但表示它沒有實現C ++ 11的<互斥> 這里

#include <mutex>
#include <iostream>

int main()
{
    std::mutex m;
    {
            std::unique_lock<std::mutex> l(m, std::try_to_lock);
            std::cout << (bool)l <<std::endl;
    }
    {
            m.lock();
            std::unique_lock<std::mutex> l(m, std::try_to_lock);
            std::cout << (bool)l <<std::endl;
    }
}

在Visual Studio中,第二個測試打印0,這意味着該鎖不具有該互斥鎖,因為該互斥鎖已被鎖定。

使用gcc,第二個測試將輸出1,這意味着該鎖已獲取了互斥鎖(即使已被鎖定),如std::adopt_lock

哪一個是正確的?

該標准使用以下命令定義了std::unique_lock構造函數:

 unique_lock(mutex_type& m, try_to_lock_t); 

要求:提供的Mutex類型必須符合Lockable要求(30.2.5.3)。 如果mutex_type不是遞歸互斥體, 則調用線程不擁有該互斥體

因此,行為是不確定的,因為您違反了該調用的要求。 std::mutex不是遞歸的。)

暫無
暫無

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

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