這裏僵局是我的源代碼:我應該修改,以防止對C++線程
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#include "thread"
#include "mutex"
int count0=0 ,count1 =0;
std::mutex main_thread;
std::unique_lock<std::mutex> lck(main_thread, std::defer_lock);
void Function00(long millisecond){
while (true){
lck.lock();
count1++;
printf("count0:%d count1:%d \n",count0,count1);
lck.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(millisecond));
}
}
void Function01(){
std::thread th(Function00, 1000);//count per 1 s
do{
lck.lock();
count0++;
lck.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(500));//count per 0.5 s
} while (1);
}
int main(int argc, char *argv[])
{
Function01();
return 0;
}
我然後使用命令來建立我的.o文件:
g++ -std=c++11 -pthread testa.cpp -o a.o
然而,它顯示了錯誤:
terminate called after throwing an instance of 'std::system_error'
what(): Resource deadlock avoided
Aborted
我感到迷惑,也不知道去解決它,所以我嘗試在Microsoft VS2013,並沒有錯誤運行...我覺得confus電子郵件。這是在Linux的問題?我應該修改哪些內容來防止僵局?
你兩次鎖定'lck'。你絕對不應該這樣做 – ForceBru
你的意思是我需要創建另一個線程? –
如果我使用函數在每次運行時創建線程,它會發生死鎖嗎? –