C++11 之 多线程中的原子操作
简介:
原子操作指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。
这意味着不需要额外的同步机制(比如显示加锁)就可以执行并发的读写操作。
原子类型:
示例代码:
#include <iostream>
#include <atomic>
#include <thread>
using namespace std;
void addAtomic( atomic<int> &num )
{
for( int i = 0; i < 1000; i++ )
{
++num;
this_thread::sleep_for( chrono::milliseconds( 1 ) );
}
}
void add( int &num )
{
for( int i = 0; i < 1000; i++ )
{
++num;
this_thread::sleep_for( chrono::milliseconds( 1 ) );
}
}
int main()
{
cout << "原子类型VS普通类型\n";
int nCount = 0;
thread t1( add, ref( nCount ) );
thread t2( add, ref( nCount ) );
t1.join();
t2.join();
atomic<int> aCount( 0 );
thread t3( addAtomic, ref( aCount ) );
thread t4( addAtomic, ref( aCount ) );
t3.join();
t4.join();
cout << "普通类型:" << nCount << endl;
cout << "原子类型:" << aCount << endl;
cout << "\n原子操作(fetch_add为例)说明:\n";
atomic<int> am( 100 );
auto ret = am.fetch_add( 100 ); //fetch_add返回原始值
cout << "am=" << am << endl;
cout << "ret=" << ret << endl;
auto ret2 = am.fetch_add( 100 );
cout << "am=" << am << endl;
cout << "ret=" << ret2 << endl;
system( "pause" );
return 0;
}
运行结果: