【发布时间】:2010-01-28 12:50:20
【问题描述】:
我有一个计数器变量,它将被多个线程访问,这将增加/减少它。它不应该被多个线程同时更新。
我知道您可以创建一个互斥对象,必须在更改相关变量之前获取该对象。在这种情况下,临界区是不合适的,因为有超过 1 个函数可以更改相关变量。
还有其他我可以在不使用互斥锁的情况下做到这一点吗?使用互斥体确实会降低性能(请参阅http://www.codeguru.com/forum/showthread.php?t=333192)。我相信在Java中,你可以在变量声明中使用一个关键字来实现这一点(它是否称为“同步”?),但是在C++中有这样的东西吗?
我知道 volatile 不是我要查找的关键字。
非常感谢。
【问题讨论】:
-
临界区仍然可以在这里工作,只要计数器只能由单个进程访问。它可以由具有相同进程的多个功能使用。事实上,临界区比互斥快。
-
re Java:不,
synchronized在java中相当于一个临界区,与volatile和原子递增/递减不同。
标签: java c++ synchronization multithreading synchronisation