程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ stl atomic_flag 例子

c++ stl atomic_flag 例子

編輯:C++入門知識

Author:DriverMonkey

Mail:[email protected]

Phone:13410905075

QQ:196568501


測試環境:Win7 64 bit

編譯器:gcc 4.81


測試代碼-

/*********************************************************************************
 Copyright (C), 1988-1999, drvivermonkey. Co., Ltd.
 File name: 
 Author: Driver Monkey
 Version: 
 Mail:[email protected]
 Date: 2014.04.02
 Description:  Test std lib automic_flag
 *********************************************************************************/
#include        // std::cout
#include          // std::atomic_flag
#include          // std::thread
#include          // std::vector
#include        // std::stringstream

using namespace std;

atomic_flag lock_stream = ATOMIC_FLAG_INIT;
stringstream stream;

void append_number(int x)
{
	while (lock_stream.test_and_set())
	{
		;
	}
 	stream << "thread #" << x << '\n';
 	lock_stream.clear();
}

int main ()
{
	std::vector threads;
	
	for (int i=1; i<=10; ++i)
	{
		threads.push_back(thread(append_number,i));//create thread
	}
	
	for (auto& th : threads) 
	{
		th.join();// wait thread return
	}

	cout << stream.str();
	
	return 0;
}

以上代碼運行結果:

\


如果屏蔽掉 //while (lock_stream.test_and_set()) 這一句代碼運行結果:<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Cjxicj4KPC9wPgo8cD4KPGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140503/2014050309241127.jpg" alt="">


總結:

第一組代碼線程內部加鎖部分代碼整個運行順序和創建順序一致。

第二組代碼線程內部代碼整個穿插運行的,沒有先後順序

對比兩組代碼運行結果可以看出加鎖成功

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved