初学多线程时,使用unlock()两次导致程序出错。
错误代码:
void liout(){
for (int i = 0; i < 100000; i++) {
mytex.lock();
if (!li.empty()) { //当li不为空时,会执行一次unlock();
int comp=li.front();
li.pop_front();
mytex.unlock();
}
mytex.unlock(); //无论如果这里又执行了一次unlock(),导致程序出错;
return;
}
修改之后:
void liout(){
for (int i = 0; i < 100000; i++) {
mytex.lock();
if (!li.empty()) {
int comp=li.front();
li.pop_front();
mytex.unlock();
}
else {
mytex.unlock(); //只在li为空的时候再unlock();
}
}
return;
}
完整代码:
#include<iostream>
#include<string>
#include<queue>
#include<unordered_map>
#include<set>
#include<thread>
#include<mutex>
usin