zoukankan      html  css  js  c++  java
  • c++11 stl atomic_flag 样例

    Author:DriverMonkey

    Mail:bookworepeng@Hotmail.com

    Phone:13410905075

    QQ:196568501


    測试环境:Win7 64 bit

    编译器:gcc 4.81

    測试代码-

    /*********************************************************************************
     Copyright (C), 1988-1999, drvivermonkey. Co., Ltd.
     File name: 
     Author: Driver Monkey
     Version: 
     Mail:bookworepeng@hotmail.com
     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"<<'
    ';
     	this_thread::sleep_for (chrono::seconds(1));//sleep check for if over thread can get the lock
     	stream << "thread #" << x<<"::release lock"<< '
    ';
     	
     	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();
    锁持有线程释放锁另外获取到锁的线程继续往下运行

  • 相关阅读:
    如何修改配置文件:CentOS下SSH端口修改
    linux ssh_config和sshd_config配置文件学习
    linux文件权限命令chmod学习
    硬盘接口类型介绍
    Linux中权限(r、w、x)对于目录与文件的意义
    谈谈对虚拟DOM的理解
    对于深入响应式原理的深刻理解
    环套树 or 基环树 找环
    POI 2014 little bird
    洛谷P2876 [USACO07JAN]解决问题Problem Solving
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4490609.html
Copyright © 2011-2022 走看看