В моем приложении у меня есть переменная int и bool, к которой обращаются (несколько записей/чтения) несколькими потоками. В настоящее время я использую два мьютекса, один для int и один для bool для защиты этих переменных.
Я слышал об использовании атомных переменных и операторов для написания незашифрованной многопоточной программы. Мои вопросы
- Что такое определение атомных переменных и операторов?
- Какое основное различие между std:: atomic и импульс /atomic.hpp? Какой из них более стандартный или популярный?
- Являются ли эти библиотеки зависимыми от платформы? Я использую gnu gcc 4.6 на Linux на данный момент, но в идеале он должен быть кросс-платформенным. Я слышал, что определение "атомный" на самом деле также зависит от аппаратного обеспечения. Может ли кто-нибудь объяснить это также?
- Какой лучший способ поделиться переменной bool между несколькими потоками? Я бы предпочел не использовать ключевое слово < 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;