作業系統 訊號量vs互斥鎖c 11訊號量實現

2021-10-09 20:29:18 字數 1001 閱讀 6210

鎖是服務於共享資源的;而semaphore多用於控制多個執行緒間的執行順序的。

1)兩個執行緒交替列印0,1

c++11中有 mutex (互斥量),有 condition_variable (條件變數),並沒有 semaphore (訊號量)。需要自己實現。

版本1:

自己實現的訊號量類。無非就是讓p v操作,即 減一 加一操作,為原子操作,這裡借助c++ std::mutex來實現這個原子,也可以使用std::atomic這種原子型別。

#pragma once

#include #include #include using namespace std;

//自己實現乙個訊號量類,無非就是讓p v操作,即 減一 加一操作,為原子操作,這裡借助

//c++ std::mutex來實現這個原子。

class semaphore

void setinitval(int v)

void p()//wait

m.lock();

s--;

m.unlock();

}void v()//notify

private:

std::mutex m;

int s;

};

驗證通過:兩個執行緒交替列印1 2。 定義兩個訊號量,s1和s2,s1初始化為0,s2初始化為1,使得執行緒1先進入。

---note:太過簡單,不具備說服力 。

#include#include#include using namespace std;

semaphore s1(0);

semaphore s2(1);

void fun1()

}void fun2()

}void main()

ref:

C 11 互斥鎖與條件變數實現訊號量

include include include includeusing namespace std class semaphere semaphere const semaphere s delete semaphere operator const semaphere s delete void...

作業系統中的同步互斥(鎖與訊號量)

作業系統的同步與互斥可以從執行緒和程序兩個角度進行理解。如果從執行緒的角度理解,這裡本文以兩個執行緒為例,需要考慮這兩個執行緒是否屬於同乙個程序,對於不同程序的執行緒來說,它們本質上和從兩個程序的角度進行理解是一樣的,在之後討論兩個程序間的同步互斥時會詳細說明。對於同一程序的兩個執行緒,假設有這樣一...

c 11 實現訊號量

簡單來說,就是訊號量太容易出錯了 too error prone 通過組合互斥鎖 mutex 和條件變數 condition variable 可以達到相同的效果,且更加安全。實現如下 class semaphore void signal void wait count private boost...