【发布时间】:2018-12-24 15:39:59
【问题描述】:
std::mutex 作为成员变量对于多线程来说是线程安全的吗?
有一个类的实例有一个变量和互斥锁作为成员。
每个函数在不同的线程中调用。
我很好奇可以使用这样的互斥锁吗?
有很多示例代码使用了一种用于互斥锁的包装类,例如保护或其他东西。
我更喜欢简单地使用它并且想要明确地解锁。不在破坏时间。
#include <mutex>
#include <stdio.h>
class A {
private:
bool _is;
std::mutex _mutex;
}
// this function runs in Thread A
void A::read() {
_mutex.lock();
printf("%d", _is);
_mutex.unlock();
}
// this function runs in Thread B
void A::write() {
_mutex.lock();
printf("%d", _is);
_is = !_is;
_mutex.unlock();
}
【问题讨论】:
-
是的,没关系。本身容易受到数据竞争影响的
mutex将毫无用处。有趣的是,您认为手动解锁互斥锁比使用lock_guard更简单。 -
这仅在两个线程访问
A的同一实例时才有效。从描述中看不清楚 -
对不起,是同一个实例。
-
@Praetorian “数据竞争”的定义意味着一个普通的变量,而不是一个同步原语。
标签: c++ multithreading thread-safety mutex