原子的比较 compare"/>
原子的比较 compare
包含原子操作的链接:
InterlockedCompareExchange 模拟callonce
内存序 memory_order
现在假设有一个套接字状态的原子变量 atomic_int socketState;
在一个设计不良的多线程环境中, N个线程都会修改此状态,但只能执行一次;
enum EnumSocketState { SocketStateNone = 0 , SocketStateAlive = 1, SocketStateClosed = 2};std::atomic_int socketState( EnumSocketState::SocketStateNone ); //状态//只修改一次
bool changeSocketStateAlive() {int iExp = EnumSocketState::SocketStateNone;return socketStatepare_exchange_strong(iExp,EnumSocketState::SocketStateAlive);
}unsigned int __stdcall thread_func(void * arg) //线程函数
{using namespace std;if(changeSocketStateAlive()) {cout << "tid: " << GetCurrentThreadId() << " change" << endl;}return 0;
}
原子的比较:
bool isSocketAlive() {int iExp = EnumSocketState::SocketStateAlive;return socketStatepare_exchange_strong(iExp,iExp);
}
更多推荐
原子的比较 compare
发布评论