[英]Why does unlocking a unique_lock cause my program to crash?
我unique_lock
一些關於unique_lock
奇怪行為。 創建它之后,我嘗試調用解鎖,但是它使我的程序崩潰。 我創建了一個最小示例,該示例在解鎖功能上始終崩潰(使用gdb進行確認)。
#include <iostream>
#include <string>
#include <mutex>
#include <thread>
#include <chrono>
std::mutex myMutex;
void lockMe()
{
std::unique_lock lock(myMutex);
std::cout << "Thread\n";
}
int main()
{
std::unique_lock lock(myMutex);
auto c = std::thread(lockMe);
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Main\n";
myMutex.unlock();
c.join();
return 0;
}
誰能解釋為什么會這樣?
通過創建std::unique_lock lock(myMutex);
您正在向鎖定對象授予互斥鎖鎖定/解鎖控制。 如果在互斥量仍處於lock
對象的控制之下時手動對其進行解鎖,則會違反該約束,並且lock
析構函數將執行兩次解鎖嘗試。
它與所有RAII包裝器相似-一旦將資源控制權授予RAII對象,就不應通過手動處理資源來干擾它。
請注意, std::unique_lock
提供了一種在作用域結束之前解鎖鎖定的互斥鎖的方法,該方法不會引起問題:
lock.unlock();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.