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两个操作分别在不同线程中的主要内容,如果未能解决你的问题,请参考以下文章

Java 线程锁机制 -Synchronized Lock 互斥锁 读写锁

使用原子和互斥锁 c++ 在类内部进行线程化

如何在 C++ 中正确地在循环中使用互斥锁?

线程同步互斥锁和读写锁的区别和各自适用场景

如果我想制作分布式互斥库,我是不是必须创建一个线程?

一组线程的 C++ 互斥锁