【发布时间】:2012-03-22 01:05:33
【问题描述】:
在我的应用程序中,我有一个 int 和一个 bool 变量,它们由多个线程访问(多次写入/读取)。目前,我正在使用两个互斥锁,一个用于 int,一个用于 bool 来保护这些变量。
我听说过使用原子变量和运算符来编写无锁多线程程序。我的问题是
- 原子变量和运算符的定义是什么?
- std::atomic 和 boost/atomic.hpp?哪个更标准或更流行?
- 这些库是否依赖于平台?我正在使用 gnu gcc 4.6 目前是 Linux,但理想情况下它应该是跨平台的。我听说“原子”的定义实际上也取决于硬件。谁能解释一下?
- 在多个线程之间共享布尔变量的最佳方式是什么?我不想使用“volatile”关键字。
这些代码是线程安全的吗?
double double_m; // double_m is only accessed by current thread.
std::atomic<bool> atomic_bool_x;
atomic_bool_x = true && (double_m > 12.5);
int int_n; // int_n is only accessed by current thread.
std::atomic<int> atomic_int_x;
std::atomic<int> atomic_int_y;
atomic_int_y = atomic_int_x * int_n;
【问题讨论】:
-
一次有很多问题要问。另外,您是在问 C++ 标准库是否是……标准的?和平台相关?
标签: c++ multithreading atomic