日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c++ 多线程编程

發布時間:2025/5/22 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 多线程编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  剛做完消息服務器的項目,項目是用c++開發的,沒有引入現在c++的特性向智能指針,bind/function等。當時在開發的時候對其中一個bug印象比較深,bug原因是在session對象釋放后,在其他地方繼續的被使用。

? ? 對于臨界資源加鎖處理。對于多個線程共享的對象通過使

  1. 有過多線程編程經驗的都知道多線程編程最基本的就是通過加鎖實現對臨界資源的安全讀寫。

  實現局部鎖

class MutexLock : boost::noncopyable { public:MutexLock() {pthread_mutex_init(&mutex_, NULL);}~MutexLock(){pthread_mutex_destroy(&mutex_);}void lock(){pthread_mutex_lock(&mutex_);}void unlock(){pthread_mutex_unlock(&mutex_);}private:pthread_mutex_t mutex_; };class MutexLockGuard : boost::noncopyable { public:explicit MutexLockGuard(MutexLock& mutex) : mutex_(mutex){mutex_.lock();}~MutexLockGuard(){mutex_.unlock();}private:MutexLock& mutex_; }

?

  2. 對象構造的時候做到線程安全

    (1) 不要在構造函數內注冊回調函數

    (2) 不要在構造函數中把this傳給跨線程的對象

    (3) 即便在構造函數的最后一行也不行,因為如果這個類是基類,則初始化完基類后還要初始化派生類。

    因為在構造函數執行期間對象還沒有初始化完成,在此時將this傳給跨線程的對象,那個對象訪問的將可能是一個沒有初始化完全的半成品。

  3. 對象在析構時

    資源在A線程正在被使用,卻在B線程被釋放。就會造成A線程訪問了無效的資源。解決這個問題的方法是在使用前判斷資源是否有效。使用工具weak_ptr和shared_ptr

    shared_ptr本身不是線程安全的,多線程安全的使用shared_ptr需要加鎖。

    shared_ptr會意外的延長對象的生命期

    對象在銷毀的時候,對象內的鎖是不會起作用的,這時候鎖很有可能已經在使用前就被銷毀了。

  

轉載于:https://www.cnblogs.com/captain-frank/p/5175687.html

總結

以上是生活随笔為你收集整理的c++ 多线程编程的全部內容,希望文章能夠幫你解決所遇到的問題。

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