c++ 互斥锁必须使用在同一个线程当中 不能lock和 unlock两个操作分别在不同线程中
Posted Zetaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 互斥锁必须使用在同一个线程当中 不能lock和 unlock两个操作分别在不同线程中相关的知识,希望对你有一定的参考价值。
lock 和unlock必须在同一个线程中!!
在子线程中上锁,在主线程中解锁,程序运行会 undefined behavior。
例子1:子线程中上锁主线程中解锁
#include <iostream>
#include <chrono>
#include <mutex>
#include <thread>
using namespace std;
mutex mtx;
void f()
mtx.lock();
int main()
thread t(f);
mtx.unlock();
t.join();
return 0;
例子2:子线程中上锁另一个子线程中解锁
#include <iostream>
#include <chrono>
#include <mutex>
#include <thread>
using namespace std;
mutex mtx;
void f()
mtx.lock();
void g()
mtx.unlock();
int main()
thread t(f);
this_thread::sleep_for(chrono::milliseconds(1000));// 主线程睡眠等待1000毫秒
thread t1(g);
t.join();
t1.join();
return 0;
以上是关于c++ 互斥锁必须使用在同一个线程当中 不能lock和 unlock两个操作分别在不同线程中的主要内容,如果未能解决你的问题,请参考以下文章