鎖是服務於共享資源的;而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...