C++에서 std::atomic

1203 단어 다 중 스 레 드
atomic 는 원자 조작 으로 분할 할 수 없 는 조작 이라는 뜻 이다.예 를 들 어 다음 gIlobal++std::atomic 를 추가 하지 않 으 면 예상 한 결 과 를 얻 지 못 할 수 있 습 니 다.예 를 들 어 아래 코드 가 예상 한 결 과 는 30 이 고 실제 결 과 는 그렇지 않 습 니 다.atomic 가 사용자 정의 데 이 터 를 사용 하여 원자 조작 을 하려 면다음 조건 을 만족 시 켜 야 합 니 다.가상 함수 가 될 수 없습니다.기본 복사 구조 와 재 부팅 연산 자 를 사용 해 야 합 니 다.memcpy 와 memcmp 작업 을 지원 해 야 합 니 다.
#include 
#include 
#include 
#include 
#include 

using namespace std;

//std::atomic g_Ilobal = 0;
//         ,store(T val, memory_order = memory_order_seq_cst),      
//T  load(memory_order = memory_order_seq_cst),    
int g_Ilobal = 0;
std::vector<:thread> g_VecThread;
void worker()
{
	for (int i =0;i<10;++i)
	{
		std::this_thread::sleep_for(std::chrono::seconds(1));
		g_Ilobal++;
	}
}
int main()
{
	for (int i = 0;i<3;++i)
	{
		g_VecThread.emplace_back(std::thread(worker));
	}
	for (auto&i : g_VecThread)
	{
		if (i.joinable())
		{
			i.join();
		}
		else
		{
			cout << "joinable is invalid " << endl;
		}
	}
	cout << "g_Ilobal is " << g_Ilobal << endl;
    return 0;
}

좋은 웹페이지 즐겨찾기