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

And*_*ndy 2 c++ java multithreading synchronization synchronisation

我有一个计数器变量,将由多个线程访问,这将增加/减少它.它不应该同时由多个线程更新.

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

还有另一个我可以不使用互斥锁吗?使用互斥锁确实会降低性能(请参阅http://www.codeguru.com/forum/showthread.php?t=333192).我相信在Java中,你可以在变量声明中使用一个关键词来实现它(它被称为"同步"吗?),但在C++中是否有这样的东西?

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

非常感谢你.

Wil*_*ill 8

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

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

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

请参阅原子指令