POSIX執行緒庫(三)執行緒同步 訊號量

2021-10-08 03:00:11 字數 1244 閱讀 9454

為什麼需要用訊號量?在posix執行緒庫(二)執行緒同步輪詢技術——一種笨笨方法 簡單的變數+延遲的方法是一種非常不聰明的方法,主要原因是普通變數不能保證原子性,同時對標誌的操作可能導致預料外的效果。荷蘭科學家dijkstra提出訊號量的概念,它是一種特殊的變數,可以被遞增遞減,當兩個或以上執行緒對這個訊號量進行改變,由系統按順序完成執行緒的請求。訊號量常用來保護一段**,保證一次只能被乙個執行緒執行。

使用乙個訊號量,其基本步驟是:

標頭檔案#include

宣告

sem_t bin_sem;
初始化
int

sem_init

(sem_t *sem,

int pshared,

unsigned

int value)

;

增加、減少訊號量
int

sem_post

(sem_t * sem)

;int

sem_wait

(sem_t * sem)

;

sem_waitsem_post都接受乙個訊號量位址,和初始化一樣,成功0,失敗!0。值得注意的是,sem_wait可能阻塞當前程序,阻塞的條件是,遞減後為負數,也就是訊號量為0,要想繼續執行,需要呼叫sem_post完成訊號量遞增。

銷毀

int

sem_destory

(sem_t * sem)

;

#include

#include

#include

#include

sem_t t;

using namespace std;

void

*thfun1

(void*)

}void

*thfun2

(void*)

}using namespace std;

intmain()

列印結果如下:

abababababababababab

20200802 才發現原來在ubuntu下執行的結果並沒有交錯執行的效果。而且實際使用的時候你沒有辦法預估乙個執行緒執行時間,因此需要找其他辦法。

OpenMP(三) 執行緒同步

1.引言 在openmp中,執行緒同步機制包括互斥鎖同步機制和事件同步機制。2.互斥鎖同步 互斥鎖同步的概念類似於windows中的臨界區 criticalsection 以及windows和linux中的mutex以及vxworks中的semtake和semgive 初始化時訊號量為滿 即對某一塊...

Posix多執行緒筆記(三) 執行緒屬性(2)

四 執行緒的排程策略 函式pthread attr setschedpolicy和pthread attr getschedpolicy分別用來設定和得到執行緒的排程策略。4.名稱 pthread attr getschedpolicy pthread attr setschedpolicy 功能 ...

Posix多執行緒筆記(三) 執行緒屬性(3)

六 執行緒的作用域 函式pthread attr setscope和pthread attr getscope分別用來設定和得到執行緒的作用域,這兩個函式的定義如下 7 名稱 pthread attr setscope pthread attr getscope 功能 獲得 設定執行緒的作用域 標頭...