簡體   English   中英

為什么解鎖unique_lock導致我的程序崩潰?

[英]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.

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