【发布时间】:2021-10-03 14:15:40
【问题描述】:
我有一个类方法,我想在不同的线程中同时读取相同的非原子类成员。该方法是const,因此它不会写入正在读取的成员。在这种情况下不用担心任何锁是否安全?
编辑: 我应该举个例子:
class SomeClass()
{
public:
void someMethod() const;
//...
private:
std::string someMemeber_; // might be changed by some methods
//...
}
void SomeClass::someMethod() const
{
std::jthread thr1([](){/*read someMember_ here*/});
std::jthread thr2([](){/*read someMember_ here*/});
//...
}
【问题讨论】:
-
类实例化后,成员的值可以改变吗?
-
可以,可以通过其他方法改变该值,但不能在多线程方法执行过程中。
-
那么每当值发生变化时,每个读取线程都需要至少同步一次。
-
如果代码向变量写入一个值,然后启动一堆只读取该值的线程,而在这些线程运行时没有其他人修改它,则代码没有数据竞争。
标签: c++ multithreading thread-safety