多线程 std::lock
当要同时操作2个对象时,就需要同时锁定这2个对象,而不是先锁定一个,然后再锁定另一个。同时锁定多个对象的方法:std::lock(对象1.锁,对象2.锁…)
额外说明:lock_guard lock_a(d1.m, std::adopt_lock);
上面这句是为了解开std::lock的锁。
参数std::adopt_lock的作用:告诉lock_guard,d1.m已经被上锁了,你不要再去锁它了,沿用它原来的锁就好。
案例:
#include <list>
#include <iostream>
#include <mutex>
#include <algorithm>
#include <thread>
#include <unistd.h>
using namespace std;
class data_protect;
void
在多线程编程中,为避免死锁,可以使用std::lock同时锁定多个对象。此方法确保正确的锁定顺序,防止线程安全问题。另外,lock_guard配合std::adopt_lock可以用于解锁已锁定的对象,避免不必要的重复加锁。
最低0.47元/天 解锁文章
598

被折叠的 条评论
为什么被折叠?



