日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boost::shared_mutex

發布時間:2024/8/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boost::shared_mutex 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?前一篇介紹的條件變量可以進行進程間通信,用來實現生產者/消費者模型。今天介紹的共享互斥量用來實現緩沖區讀寫模型,與生產者/消費者模型不同的地方是,消費者消費產品后,被消費的產品就不存在了,所以消費者線程也要互斥運行;而緩沖區讀取線程讀取數據后不刪除數據,多個線程可以并行讀取。這時使用條件變量也不合適了,就要使用共享互斥變量了。

??????? 共享互斥量,顧名思義,既共享,也互斥,讀線程之間共享讀取數據,使用shared_lock類鎖定shared_mutex變量;寫線程之間需要獨占緩沖區,必須互斥運行,使用unique_lock類鎖定shared_mutex變量。這與互斥變量mutex的使用方法不一樣,mutex類內部提供了一種lock_guard類即scope_lock類,因此可以用

[cpp]?view plaincopy print?
  • mutex::scope_lock?lock(mu);??
  • 這樣的形式來鎖定互斥量,而share_mutex類沒有提供這種內部定義的lock_guard類,所以需要直接使用lock_guard對象,語法如下代碼:

    [cpp]?view plaincopy print?
  • shared_mutex?rw_mu;??
  • ??
  • unique_lock<shared_mutex>?ul(rw_mu);??
  • shared_lock<shared_mutex>?sl(rw_mu);??

  • 下面是《指南》上的例子:
    ?

    [cpp]?view plaincopy print?
  • private:??
  • ????????int?m_x;??
  • ????????shared_mutex?rw_mu;??
  • ??
  • public:??
  • ????????rw_data():m_x(0){}??
  • ??
  • ????????void?write()??
  • ????????{??
  • ????????????unique_lock<shared_mutex>?ul(rw_mu);??
  • ????????????++m_x;??
  • ????????}??
  • ??
  • ????????void?read(int&?x)??
  • ????????{??
  • ????????????shared_lock<shared_mutex>?sl(rw_mu);??
  • ????????????x?=?m_x;??
  • ????????}??
  • };??
  • ??
  • void?writer(rw_data&?d)??
  • {??
  • ????for(int?i?=?0;?i?<?20;?++i)??
  • ????{??
  • ????????this_thread::sleep(posix_time::millisec(10));??
  • ????????d.write();??
  • ????}??
  • }??
  • ??
  • void?reader(rw_data&?d,?mutex&?io_mu)??
  • {??
  • ????int?x;??
  • ??
  • ????for(int?i?=?0;?i?<?10;?++i)??
  • ????{??
  • ????????this_thread::sleep(posix_time::millisec(5));??
  • ????????d.read(x);??
  • ????????mutex::scoped_lock?lock(io_mu);??
  • ????????std::cout?<<?"reader:"?<<?x?<<?std::endl;??
  • ????}??
  • }??
  • ??
  • int?main()??
  • {??
  • ???rw_data?d;??
  • ???thread_group?pool;??
  • ???mutex?io_mu;??
  • ?????
  • ???pool.create_thread(bind(reader,ref(d),?ref(io_mu)));??
  • ???pool.create_thread(bind(reader,ref(d),?ref(io_mu)));??
  • ???pool.create_thread(bind(reader,ref(d),?ref(io_mu)));??
  • ???pool.create_thread(bind(reader,ref(d),?ref(io_mu)));??
  • ???pool.create_thread(bind(writer,ref(d)));??
  • ???pool.create_thread(bind(writer,ref(d)));??
  • ??
  • ???pool.join_all();??
  • ??
  • ???return?0;??
  • } ?
  • 總結

    以上是生活随笔為你收集整理的boost::shared_mutex的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。