執行緒池web伺服器 2 執行緒同步機制封裝類

2021-10-06 23:47:00 字數 2249 閱讀 3639

raii全稱是「resource acquisition is initialization」,直譯過來是「資源獲取即初始化」.

在建構函式中申請分配資源,在析構函式中釋放資源。因為c++的語言機制保證了,當乙個物件建立的時候,自動呼叫建構函式,當物件超出作用域的時候會自動呼叫析構函式。所以,在raii的指導下,我們應該使用類來管理資源,將資源和物件的生命週期繫結

raii的核心思想是將資源或者狀態與物件的生命週期繫結,通過c++的語言機制,實現資源和狀態的安全管理,智慧型指標是raii最好的例子

訊號量是一種特殊的變數,它只能取自然數值並且只支援兩種操作:等待§和訊號(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_wait的執行緒

互斥鎖,也成互斥量,可以保護關鍵**段,以確保獨佔式訪問.當進入關鍵**段,獲得互斥鎖將其加鎖;離開關鍵**段,喚醒等待該互斥鎖的執行緒.

●pthread_mutex_init函式用於初始化互斥鎖

●pthread_mutex_destory函式用於銷毀互斥鎖

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

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

條件變數提供了一種執行緒間的通知機制,當某個共享資料達到某個值時,喚醒等待這個共享資料的執行緒.

●pthread_cond_init函式用於初始化條件變數

●pthread_cond_destory函式銷毀條件變數

●pthread_cond_broadcast函式以廣播的方式喚醒所有等待目標條件變數的執行緒

●pthread_cond_wait函式用於等待目標條件變數.該函式呼叫時需要傳入 mutex引數(加鎖的互斥鎖) ,函式執行時,先把呼叫執行緒放入條件變數的請求佇列,然後將互斥鎖mutex解鎖,當函式成功返回為0時,互斥鎖會再次被鎖上. 也就是說函式內部會有一次解鎖和加鎖操作.

#ifndef locker_h

#define locker_h

#include

#include

#include

using

namespace std;

class

sem/*銷毀訊號量*/

~sem()

/*等待訊號量變為非0,然後-1*/

bool

wait()

/*增加訊號量,+1*/

bool

post()

private

: sem_t m_sem;};

/*封裝互斥鎖*/

class

locker

~locker()

/*加鎖*/

bool

lock()

/*解鎖*/

bool

unlock()

pthread_mutex_t*

get(

)private

: pthread_mutex_t m_mutex;};

/*封裝條件變數*/

class

cond}~

cond()

/*等待條件變數:使執行緒掛起,等待某個條件變數的訊號,注意前後要加解鎖*/

bool

wait()

/*等待一定的時間,指定時間內等待訊號量*/

bool

timewait

(pthread_mutex_t *m_mutex,

struct timespec t)

/*喚醒等待條件變數的執行緒*/

bool

signal()

/*喚醒多個等待條件變數的執行緒*/

bool

broadcast()

private

://pthread_mutex_t m_mutex;

pthread_cond_t m_cond;};

#

執行緒池併發伺服器

預先建立阻塞於accept多執行緒,使用互斥鎖上鎖保護accept 預先建立多執行緒,由主線程呼叫accept pthread mutex t lock 用於鎖住本結構體 pthread mutex t thread counter 記錄忙狀態執行緒個數de瑣 busy thr num pthrea...

基於執行緒池的http伺服器

public static void main string args catch ioexception e 這是整個程式的入口,初始化該初始化的,監聽該 監聽的。threadpoolmanager用於管理執行緒,初始化有三個執行緒。accept方法會造成阻塞,知道有訊息傳過來。將接收到的訊息傳入...

執行緒池實現高效能伺服器

為了改善多程序和多執行緒實現伺服器不停地建立刪除程序或執行緒給系統帶來的負擔,引進了執行緒池,程序池來改善此種情況,此處以執行緒池為例。執行緒池的優勢 1 建立的程序或者執行緒是有限的,伺服器的系統代價比較小,一般不會到達系統限制的值。2 伺服器不需要頻繁的建立 銷毀程序或者執行緒,只在伺服器啟動時...