c++ 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 << ‘\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;
}

以上代码运行结果:

如果屏蔽掉 //while (lock_stream.test_and_set()) 这一句代码运行结果:

总结:

第一组代码线程内部加锁部分代码整个运行顺序和创建顺序一致。

第二组代码线程内部代码整个穿插运行的,没有先后顺序

对比两组代码运行结果可以看出加锁成功

c++ stl atomic_flag 例子

时间: 2024-12-20 00:38:53

c++ stl atomic_flag 例子的相关文章

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

c/c++ 模板与STL小例子系列&lt;一 &gt;自建Array数组

c/c++ 模板与STL小例子系列<一> 自建Array数组 自建的Array数组,提供如下对外接口 方法 功能描述 Array() 无参数构造方法,构造元素个数为模板参数个的数组 Array(int length) 有参数构造方法,构造元素个数为参数length个的数组 ~Array() 析构函数 int size() 返回数组中元素的个数 T& get(int num) 返回数组中指定下标的元素的引用 void set(T data, int num) 设置指定下标元素的值 T&a

stl使用例子

S ample of STLSTL 范例(一)容器部分Vector-------------------------------------------1Deque--------------------------------------------------20List---------------------------------------------------38Set-----------------------------------------------------66M

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 n

lambda函数

C++11一个最激动人心的特性是支持创建lambda函数(有时称为闭包).这意味着什么?一个Lambda函数是一个可以内联写在你代码中的函数(通常也会传递给另外的函数,类似于仿函数或函数指针).使用Lambda,创建机动函数会更简单,而以前你必须创建一个有名函数.在这篇文章中,我先用一些例子解释为什么lambda很酷,然后我会讲解可能会用到的关于lambda的所有细节. 为什么Lambda很酷 想象你有一个地址簿类,并且你想要提供一个可供检索的函数.你可能会提供一个简单的函数,接受一个字符串然后

(转载)C++迭代器之&#39;插入迭代器

1. 定义 插入型迭代器(Insert Iterator),又叫插入器(Inserter). 2. 作用 插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作.算法库对所有在容器上的操作有约束:决不修改容器的大小(不插入.不删除).有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一统带,即保持了设计上的一致性. 3. 类型 3.1 尾部插入器(back_insert_iterator)使用:通过调用容器的push_back()成员函数来插入元素功能:在容器的

迭代器的抽象

迭代器的抽象 迭代器是好东西,也是猿猴工具箱里面的七种武器之一.代码中必然要操作一堆数据,因此就要有容器,有了容器,自然就不可缺少迭代器,没有迭代器,容器使用 上就会非常不方便,并且还必须暴露其内部实现方式.比如,在可怜的C语言里面,操作数组容器就要通过整数索引来访问其元素,操作链表容器,就要通过 while(node->next!=null)这样的方式来访问其元素.某种意义上讲,整数索引,node->next这些都是迭代器,只 是它们的使用方式没有统一起来而已.既然如此,全世界的迭代器的使用

STL C++ std::bind操作例子,仿函数操作配合算法库操作

1.stl::bind 和std::mem_fun_ref系列的配合使用出现了问题,多参形式不知道如何组织.适配器的操作真心难受!!!只能迷迷糊糊地用着.要使用非质变算法时需要作用于容器时只能考虑lambda或者transfer操作.待续 // functor-adapter_p431.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <algorithm>//元素操作算法 #include <functiona

第一个STL例子

#include<iostream.h> #include<algorithm> using namespace std; #define SIZE 100 int iarray[SIZE]; int main() { iarray[20]=50; int *ip=find(iarray,iarray+SIZE,50); if(ip==iarray+SIZE) cout<<"50notfoundinarray"<<endl; else c