gpt4 book ai didi

java - C++ 多线程问题——互斥是唯一的方法吗?

转载 作者:太空狗 更新时间:2023-10-29 23:23:04 25 4
gpt4 key购买 nike

我有一个计数器变量,它将被多个线程访问,这些线程将递增/递减它。它不应该被多个线程同时更新。

我知道您可以创建一个互斥对象,该对象必须在相关变量被更改之前获取。在这种情况下,关键部分是不合适的,因为有不止 1 个函数可以更改相关变量。

有没有其他方法可以在不使用互斥体的情况下做到这一点?使用互斥量确实会降低性能(请参阅 http://www.codeguru.com/forum/showthread.php?t=333192 )。我相信在 Java 中,您可以在变量声明中使用一个关键字来实现这一点(它称为“同步”吗?),但在 C++ 中根本没有这样的东西吗?

我知道 volatile 不是我要找的关键字。

非常感谢。

最佳答案

大多数处理器都有'atomic ' 递增和递减指令 - 在很大程度上,它们是在机器级别实现互斥量的方式。

您可以在自己的代码中访问这些原子指令。 Windows 提供 InterlockedIncrement()功能,和glib provides equivalents .在x86汇编语言中,可以直接使用LOCK CMPXCHG和kin。

C++ 对这些概念一无所知——你必须自己使用它们; C++ 中没有用于线程安全的神奇关键字。

参见 Atomic Instruction

关于java - C++ 多线程问题——互斥是唯一的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2154567/

25 4 0