zoukankan      html  css  js  c++  java
  • BOOST中如何实现线程安全代码

     

    1 需要include <boost/thread.hpp> 
    2 背景知识请参考《boost程序库完全开发指南》第12章 
    3 编绎:g++ -o mthread mthread.cpp -lboost_thread -L/usr/local/lib
     
    标签: Boost
     

    代码片段(1)[全屏查看所有代码]

    1. [代码][C/C++]代码     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <boost/thread.hpp>
    using namespace boost;
    using namespace std;
     
    mutex io_mu; // 定认全局互斥变量
     
    /*
     * 模板类: 线程安全的计数器,不可拷贝
     */
    template<typename T>
      class basic_atom: noncopyable
      {
      private:
        T n;
        mutex mu;
      public:
        basic_atom(T x = T()) :n(x) {}
        T operator++() {
          mutex::scoped_lock lock(mu);  //用scoped_lock锁住成员互斥信号变量
          return ++n;
        }
        operator T() { return n; }
      };
     
    typedef basic_atom<int> atom_int;  // 将模板类定义精简名atom_int
     
    int to_interrupt(atom_int& x, const string& str)
    try {
      for (int i = 0; i < 9; ++i) {
        this_thread::sleep(posix_time::seconds(1));  // 此处应该是子线程sleep1秒
        mutex::scoped_lock lock(io_mu); //io流非线程安全,必须锁住
        cout << str << ": " << ++x << endl;
      }
    } catch(thread_interrupted& ) {
      cout << "thread interrupted" << endl;
    }
     
    int main()
    {
       atom_int x;
       thread t(to_interrupt, ref(x), "hello"); // t调用to_interrupt函数,并输出hello x
       this_thread::sleep(posix_time::seconds(3)); //此处应该是主线程睡眠3秒
       t.interrupt();  // 调用线程的中断操作
       t.join();  // 因为线程已中断,所以线程立即返回
    }
  • 相关阅读:
    jQuery 中 children() 与 find() 用法的区别
    JSON.parse()和JSON.stringify() 的用法区别
    Cookie 与Session 的区别(转载)
    Ajax的post方法,模拟 从后台读取数据小demo
    Tab切换栏
    C# Linq to Entity 多条件 OR查询
    C# 执行DOS命令和批处理
    C# 将DataTable数据源转换成实体类
    MYSQL 企业常用架构与调优经验分享
    C# 虚方法virtual详解
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4447142.html
Copyright © 2011-2022 走看看