c++11 stl atomic_flag 样例

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 <iostream>       // std::cout
#include <atomic>         // std::atomic_flag
#include <thread>         // std::thread
#include <vector>         // std::vector
#include <sstream>       // 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 <<"::get lock"<<‘\n‘;
 	this_thread::sleep_for (chrono::seconds(1));//sleep check for if over thread can get the lock
 	stream << "thread #" << x<<"::release lock"<< ‘\n‘;

 	lock_stream.clear();
}

int main ()
{
	std::vector<std::thread> 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;
}

以上代码执行结果:

总结:

线程获取锁后 sleep 进行释放当前执行CPU资源, 通过信息打印能够看出,其它线程执行到

while (lock_stream.test_and_set())

获取锁代码就没再往下运行,直到

lock_stream.clear();

锁持有线程释放锁另外获取到锁的线程继续往下运行

时间: 2024-08-25 23:03:31

c++11 stl atomic_flag 样例的相关文章

Thrift跨语言样例开发

一.开发环境 1.有一台部署好thrift框架的电脑,本人采用centos5下的thrift框架 (部署步骤可以参看http://blog.csdn.net/san1156/article/details/41146483 ) 2.部署的thrift环境需要支持java和c++ 二.样例功能 使用c++做服务端,java做客户端,客户端远程调用服务端的服务 三.开发步骤 1.创建接口IDL文件,后缀名为.thrift 文件名:strReversed.thrift struct StrInfo {

IronPython 个人网站样例----宝藏挖掘

IronPython for ASP.NET 的 CTP 已经发布两个多星期了,惭愧的是,因为工作繁忙,一直没有太多时间来学习.居然忽略了 Personal Web Site Starter Kit 的 IronPython 样例.幸亏了 Scott Guthrie 这篇博客:http://blog.joycode.com/scottgu/archive/2006/11/18/86737.aspx,才让我发现了这个宝库. 今天下午花了点时间学习了一下,收获不少.记录在这里. IronPython

LoadRunner性能测试样例分析

LR性能测试结果样例分析 测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可以从结果摘要.并发数.平均事务响应时间.每秒点击数.业务成功率.系统资源.网页细分图.Web服务器资源.数据库服务器资源等几个方面分析,如图1- 1所示.性能测试结果分析的一个重要的原则是以性能测试的需求指标为导向.我们回顾一下本次性能测试的目的,正如 所列的指标,本次测试的要求是验证在30分钟内完成2000次用户登录系统,然后进行考勤业务,最后退出,在业务操作过程中页面的响应时间不超过3秒,并且服

Linux crontab 命令格式与具体样例

基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示月份1-12 第5列标识号星期0-6(0表示星期天) 第6列要执行的命令 crontab文件的一些样例: 30 21 * * * /usr/local/etc/rc.d/lighttpd restart 上面的样例表示每晚的21:30重新启动apache. 45 4 1,10,22 * * /usr

关于peersim样例配置文件的超详细解读(新手勿喷)

相信很多兄弟一开始接触peersim,对配置文件还是有点不适应,我看了好久的样例的配置文件,一层层去找对应的文件的方法,终于好像悟懂了一点,记下来以后回顾. 贴上代码,一点点分析. 首先要说下所谓的配置文件,其实就是一个txt文件,语法也是非常简单,类似java里的给类里的变量赋值,这也正对应了配置文件的作用,配置文件,当然就是为实验的参数进行配置用的,所以配置文件的主要功能就是配置各类参数,定义一些协议类.控制类.初始化类以及一些常数. 1 # PEERSIM EXAMPLE 1 #配置文件中

echarts 应用数个样例

应用一:环形图和饼图嵌套 先说明一下内部文件分布: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGV4dGJveQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 注意输入数组的格式(不是一般Javascript 的数组格式,而是有点像json 的样子),代码例如以下: profiles_pie_weibo:function(event_

Hadoop辅助排序样例一

1. 样例数据 011990-99999 SIHCCAJAVRI 012650-99999 TYNSET-HANSMOEN 012650-99999 194903241200 111 012650-99999 194903241800 78 011990-99999 195005150700 0 011990-99999 195005151200 22 011990-99999 195005151800 -11 2. 需求 3. 思路.代码 将气象站ID相同的气象站信息和天气信息交由同一个 Re

C++继承经典样例

c++继承经典样例 #include <iostream.h> class Base { private: int b_number; public: Base( ){} Base(int i) : b_number (i) { } int get_number( ) {return b_number;} void print( ) {cout << b_number << endl;} }; class Derived : public Base { private:

使用SALT-API进入集成开发的简单样例

测试的时候,可以CURL -K,但真正作集成的时候,却是不可以的. 必须,不可以让TOKEN满天飞吧. 现在进入这个阶段了.写个样例先: import salt import salt.auth import salt.log import saltapi opts = salt.client.LocalClient().opts auth = salt.auth.LoadAuth(opts) lowstate = {'username':'XXX','password':'XXX','eaut