先貼代碼
#include <iostream>
#include <mutex>
#include <thread>
#include <chrono>
std::timed_mutex tm_mtx;
void thread_func()
{
std::unique_lock<std::timed_mutex> uqlk(tm_mtx, std::defer_lock);
if (uqlk.try_lock_for(std::chrono::seconds(5))) {
std::cout << "get lock success" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(6));
std::cout << "sleep over" << std::endl;
}
else {
std::cout << "get lock fail" << std::endl;
}
}
int main()
{
std::thread td1(thread_func);
td1.detach();
std::thread td2(thread_func);
td2.detach();
getchar();
return 0;
}
以上這段代碼在windows下運行,thread1在獲取到鎖后休眠6s; thread2嘗試在5s內獲取鎖失敗,5s之后列印 get lock fail。
linux下運行,thread1首先獲取到鎖,接著thread2嘗試獲取鎖失敗,直接列印 get lok fail,并沒有觸發5s的機制,懇請各位大佬解釋一下是什么原因?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/97781.html
標籤:C++ 語言
上一篇:【求助】sourceInsight怎么在工具列下邊顯示檔案名
下一篇:如何獲取事件的名稱
