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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

cwinthread*线程指针怎么销毁结束_最新版Web服务器项目详解 01 线程同步机制封装类...

發布時間:2024/7/23 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cwinthread*线程指针怎么销毁结束_最新版Web服务器项目详解 01 线程同步机制封装类... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點 擊 關 注 上?方"兩猿社

設 為"置 頂 或 星 標",干 貨 第 一?時 間 送 達。

互 聯 網 猿 | 兩 猿 社

基礎知識

RAII

  • RAII全稱是“Resource Acquisition is Initialization”,直譯過來是“資源獲取即初始化”.

  • 在構造函數中申請分配資源,在析構函數中釋放資源。因為C++的語言機制保證了,當一個對象創建的時候,自動調用構造函數,當對象超出作用域的時候會自動調用析構函數。所以,在RAII的指導下,我們應該使用類來管理資源,將資源和對象的生命周期綁定

  • RAII的核心思想是將資源或者狀態與對象的生命周期綁定,通過C++的語言機制,實現資源和狀態的安全管理,智能指針是RAII最好的例子

信號量

信號量是一種特殊的變量,它只能取自然數值并且只支持兩種操作:等待(P)和信號(V).假設有信號量SV,對其的P、V操作如下:

  • P,如果SV的值大于0,則將其減一;若SV的值為0,則掛起執行

  • V,如果有其他進行因為等待SV而掛起,則喚醒;若沒有,則將SV值加一

信號量的取值可以是任何自然數,最常用的,最簡單的信號量是二進制信號量,只有0和1兩個值.

  • sem_init函數用于初始化一個未命名的信號量

  • sem_destory函數用于銷毀信號量

  • sem_wait函數將以原子操作方式將信號量減一,信號量為0時,sem_wait阻塞

  • sem_post函數以原子操作方式將信號量加一,信號量大于0時,喚醒調用sem_post的線程

以上,成功返回0,失敗返回errno

互斥量

互斥鎖,也成互斥量,可以保護關鍵代碼段,以確保獨占式訪問.當進入關鍵代碼段,獲得互斥鎖將其加鎖;離開關鍵代碼段,喚醒等待該互斥鎖的線程.

  • pthread_mutex_init函數用于初始化互斥鎖

  • pthread_mutex_destory函數用于銷毀互斥鎖

  • pthread_mutex_lock函數以原子操作方式給互斥鎖加鎖

  • pthread_mutex_unlock函數以原子操作方式給互斥鎖解鎖

以上,成功返回0,失敗返回errno

條件變量

條件變量提供了一種線程間的通知機制,當某個共享數據達到某個值時,喚醒等待這個共享數據的線程.

  • pthread_cond_init函數用于初始化條件變量

  • pthread_cond_destory函數銷毀條件變量

  • pthread_cond_broadcast函數以廣播的方式喚醒所有等待目標條件變量的線程

  • pthread_cond_wait函數用于等待目標條件變量.該函數調用時需要傳入 mutex參數(加鎖的互斥鎖) ,函數執行時,先把調用線程放入條件變量的請求隊列,然后將互斥鎖mutex解鎖,當函數成功返回為0時,互斥鎖會再次被鎖上. 也就是說函數內部會有一次解鎖和加鎖操作.

功能

鎖機制的功能

  • 實現多線程同步,通過鎖機制,確保任一時刻只能有一個線程能進入關鍵代碼段.

封裝的功能

  • 類中主要是Linux下三種鎖進行封裝,將鎖的創建于銷毀函數封裝在類的構造與析構函數中,實現RAII機制

1class?sem{
2????public:
3????????//構造函數
4????????sem()
5????????{
6????????????//信號量初始化
7????????????if(sem_init(&m_sem,0,0)!=0){
8????????????????throw?std::exception();
9????????????}
10????????}
11????????//析構函數
12????????~sem()
13????????{
14????????????//信號量銷毀
15????????????sem_destroy(&m_sem);
16????????}
17????private:
18????????sem_t?m_sem;
19};
  • 將重復使用的代碼封裝為函數,減少代碼的重復,使其更簡潔

1???//條件變量的使用機制需要配合鎖來使用
2???//內部會有一次加鎖和解鎖
3???//封裝起來會使得更加簡潔
4???bool?wait() 5???{
6???????int?ret=0;
7???????pthread_mutex_lock(&m_mutex);
8???????ret=pthread_cond_wait(&m_cond,&m_mutex);
9???????pthread_mutex_unlock(&m_mutex);
10???????return?ret==0;
11???}
12???bool?signal()13???{
14???????return?pthread_cond_signal(&m_cond)==0;
15???}

如果本文對你有幫助,閱讀原文star一下服務器項目,我們需要你的星星^_^.

完。

總結

以上是生活随笔為你收集整理的cwinthread*线程指针怎么销毁结束_最新版Web服务器项目详解 01 线程同步机制封装类...的全部內容,希望文章能夠幫你解決所遇到的問題。

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