zoukankan      html  css  js  c++  java
  • boost::thread boost库线程

    一.boost::thread的创建

      1.线程创建方法一:

        boost::shared_ptr<boost::thread> writeThread_;

        boost::function0<void> f = boost::bind(&DBTaskMgr::execute, this);

        writeThread_ = boost::shared_ptr<boost::thread>(new boost::thread(f));

      2.线程创建方法二:

        boost::thread myThread(threadFun);  //函数无参数,并返回void类型

      3.放弃时间片: 

        boost::thread::yield();

        当前线程放弃余下的时间片。

      4.等待一个线程:

        myThread.join();

        注:调用这个方法的线程进入wait状态,直到myThread代表的线程完成为止。如果它不结束的话,join方法就不会返回。join是一个等待子线程结束的最好的方法。

          如果主程序不调用join方法而直接结束,它的子线程有可能没有执行完成,但是所有的子线程也随之退出。不调用join方法,主线程就不会等待它的子线程。

    二.从一个线程中给另一个线程发送通知

       当需要线程等待某个事物时,可以创建一个condition对象,然后通过这个对象来通知那些等待的线程。

      #include <iostream>

      #include <boost/thread/thread.hpp>

      #include <boost/thread/condition.hpp>

      #include <boost/thread/mutex.hpp>

      

      boost::shared_ptr<boost::thread> writeThread_;

      boost::mutex taskMutex_;

      boost::condition_variable taskCond;

      bool taskReady = false;

      while(true)
      {
        {
          boost::unique_lock<boost::mutex> lock(taskMutex_); //锁定taskMutex_对象
          while (!taskReady)
          {
            taskCond.wait(lock); //解开这个taskMutex_上的锁,然后进行等待或者休眠,直到它的条件得到了满足
          }
          taskReady = false;

        }

          ...............................................

          ......
      }

      

      

      void DBTaskMgr::enqueueTask(IDBTask * task)
      {
        taskQueMutex_.lock();
        taskQue_.push_back(task);
        taskQueMutex_.unlock();

        

        {
          boost::unique_lock<boost::mutex> lock(taskMutex_);
          taskReady = true;
        }

        taskCond.notify_one(); //解除线程等待或休眠

        //taskCond.notify_all(); //解开所有线程等待或休眠

      }

      .....................................

  • 相关阅读:
    理解区块链背后的Merkle Tree
    黑科技!当会爬虫的Python遇上会画图的FineBI……
    PlayFramework 1.x 生产环境部署 源码编译
    特别推荐:系统性能提升优先法宝 | 缓存应用实践
    Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy
    BI分析工具选型:从PowerBI到FineBI的9个理由!
    集群的定义以及类别定义
    python cx_oracle 绑定变量
    [故障解决]图文:windows apache无法启用 端口被占用
    设计模式之抽象工厂模式
  • 原文地址:https://www.cnblogs.com/wuchunming/p/3793419.html
Copyright © 2011-2022 走看看