Mutex用于简单数据类型

时间:2015-08-04 12:06:50

标签: c++ mutex

我很擅长并发,而且我在决定如何使用互斥锁方面遇到了麻烦。目前,它们遍布我的代码,两个线程相互作用。这种互斥体的使用是否合适?

spines

我有很多数据成员可以通过不同的线程从外部读取和设置,我发现跟踪所有获取和释放互斥锁是一件令人头痛的问题。

2 个答案:

答案 0 :(得分:3)

原始类型的变异不保证是线程安全的,或者更确切地说是原子的。事实上,如果你查看<atomic>,你会注意到有几个专业化,包括std::atomic_int

来自cppreference

  

原子类型的对象是唯一没有数据竞争的C ++对象;也就是说,如果一个线程写入原子对象而另一个线程从中读取,则行为是明确定义的。

要专门回答有关使用互斥锁的问题,是的,在您的示例中使用互斥锁是正常的。通常,您希望尽可能短地保留互斥锁。换句话说,如果你有一个功能很多,只能锁定非线程安全代码周围的互斥锁,然后在代码是线程安全后立即解锁它。

答案 1 :(得分:1)

这种互斥方式非常幼稚,无法避免死锁问题和其他并发问题。

您必须明确标识代码中由两个进程同时访问会导致问题并在关键部分保护它们的位置。并且您必须确保不会让两个进程启动由于另一个进程而无法完成的操作。

在其他地方,可能不需要保护,激活互斥锁会有点矫枉过正。

通常情况下,原子性不是单个变量,而是一组耦合变量。