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機制
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};
將重復使用的代碼封裝為函數,減少代碼的重復,使其更簡潔
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 线程同步机制封装类...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++内存分类
- 下一篇: html免费天气预报代码,免费自我定制天