我可以假设C ++中的静态类数据成员的线程安全吗?在下面的例子中,SetCounter是线程安全的吗?
class Foo {
public:
static void SetCounter(int c) { counter = c; }
private:
static int counter = 0;
}
答案 0 :(得分:1)
线程安全是指使行动独立于其他行动以避免竞争条件。如果您有两个主题,一个主叫SetCounter(1)
而另一个主叫SetCounter(2)
,则您无法保证将counter
设置为什么。您需要在值上使用互斥锁/锁定以防止其被其他线程修改。如果你正在使用像boost这样的库,你可以参考Synchronization page。否则,请使用您自己的互斥锁切换它是锁定还是解锁。