zoukankan      html  css  js  c++  java
  • 线程

    thread库位于名字空间boost,为了使用thread库需要包含头文件<boost/thread.hpp>。

    thread对象是不可拷贝的。

    当成功创建一个thread对象后,线程就立刻开始执行。

    #include <boost/thread.hpp>
    #include <boost/ref.hpp>
    #include <iostream>
    
    template<typename T>
    class basic_atom :boost::noncopyable // 原子操作的计数器,可在多线程环境下正确计数
    {
    private:
    	T n;
    	typedef boost::mutex mutex_t; // 互斥量类型定义
    	mutex_t mu;
    public:
    	basic_atom(T x = T()) :n(x){}
    	T operator++() // 前置式递增操作符
    	{
    		mutex_t::scoped_lock lock(mu); // 锁定互斥量
    		return ++n;
    	}
    	operator T() // 类型转换操作符定义
    	{
    		return n;
    	}
    };
    
    typedef boost::mutex mutex_t;
    typedef basic_atom<int> atom_int;
    mutex_t io_mu;
    void printing(atom_int &x, const std::string &str)
    {
    	for (int i = 0; i < 5; i++)
    	{
    		mutex_t::scoped_lock lock(io_mu);
    		std::cout << str << ++x << std::endl;
    	}
    }
    
    int main()
    {
    	
    	atom_int x;
    	// 使用临时thread对象启动线程
    	boost::thread t1(printing, boost::ref(x), "first"); // 向函数传递参数,使用ref库传递引用
    	boost::thread t2(printing, boost::ref(x), "second");
    	boost::thread t3(boost::bind(printing, boost::ref(x), "third")); // bind表达式
    	t1.join(); // 阻塞等待直到线程结束
    	t2.join();
    	t3.join();
    	return 0;
    }
     
    

      

    运行截图:

     

  • 相关阅读:
    2020年MongoDB 企业应用实战 基础 复制集 分片集群
    2020年Redis5.0 从入门到企业应用实战
    2020年Jumpserver1.5.8企业生产部署指南
    python单例与数据库连接池
    python 异常处理
    python 正则
    python 多线程
    python 队列
    python 闭包与装饰器
    程序员面试资源集锦
  • 原文地址:https://www.cnblogs.com/ACGame/p/9101874.html
Copyright © 2011-2022 走看看