c++多线程 变量原子化
时间: 2024-02-10 20:06:44 浏览: 117
C++多线程原子操作
C语言中多线程编程中的变量原子化是指对于一个变量的操作是原子的,即一次操作不可被中断或分割,这样可以避免多个线程同时对同一个变量进行修改而造成的数据竞争问题。为了保证变量的原子性,C语言提供了atomic原子变量类型和相关的操作函数,如atomic_init(), atomic_load(), atomic_store(), atomic_fetch_add()等。使用atomic变量可以避免使用互斥锁或信号量等同步机制,从而提高了程序的执行效率。
例如,在多线程中对于一个共享变量sum进行加操作,可以将sum定义为atomic_int类型,然后使用atomic_fetch_add()函数进行加操作,这样可以保证sum的操作是原子的,避免了数据竞争问题的发生。例如下面的代码就是对变量sum进行了原子化操作:
#include <iostream>
#include <thread>
#include <atomic>
using namespace std;
const int tcount = 4;
atomic_int sum(0);
void mythread() {
for (int i = 0; i < 400000; i++) {
sum.fetch_add(1);
}
}
int main() {
thread t[tcount];
for (int i = 0; i < tcount; i++) {
t[i] = thread(mythread);
}
for (int i = 0; i < tcount; i++) {
t[i].join();
}
cout<<"sum=" << sum << endl;
cout << "Hello,main thread" << endl;
system("pause");
return 0;
}
--相关问题--:
阅读全文