Ric*_*ard 0 c++ multithreading thread-safety
+=c ++中的运算符是否是线程安全的?
可以想象它不是的情况(伪代码):
int a = 5;
void thread1 () {
a += 5;
}
void thread2 () {
a += 5;
}
void main () {
start_thread1 ();
start_thread2 ();
//Prints 15 always, but i think 10 is not impossible.
printf ("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
很明显,当+ =重载时我必须使用互斥锁,但是在使用简单类型时我是否必须设置互斥锁?
它不是线程安全的.
要在不使用阻塞(互斥锁)的情况下获得同步行为,您可以使用C++ 11包装器std::atomic.
std::atomic<int> a{5};
void work() {
a += 5; // Performed atomically.
}
int main() {
std::thread t1{work};
std::thread t2{work};
t1.join();
t2.join();
std::cout << a << std::endl; // Will always output 15.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |