我是否需要构造函数中的互斥量?

kgs*_*kgs 8 c++ mutex

假设我有一个简单的类A,在C++中有一个字段.该字段在构造函数中初始化.A类还有一个方法,doit()用于修改该字段的值.doit()将从多个线程调用.如果我只在doit()方法中有一个互斥锁,这是否足够?我是否保证永远不会读取未初始化的字段(因为构造函数中没有锁定)?

编辑:我可能不够清楚.是否没有涉及处理器缓存或类似问题的问题?我的意思是,如果没有用于初始化内存区域的互斥体(即我的字段) - 是否存在其他线程将读取某些垃圾值的风险?

Mar*_*ram 7

您的对象只能初始化一次,并且在初始化之前您将无法使用它,因此您不需要在那里使用互斥锁.但是,您需要在DoIt函数中使用互斥锁或其他合适的锁,正如您所说,这将在多个线程中访问.

编辑问题的更新:不,您不必担心处理器缓存.在获得对象之前,必须先构造对象.只有拥有此句柄后,才能将其传递给其他要使用的线程.我想说的是,生成的线程必须在构造原始对象后开始,它不可能以相反的方式发生!