linux驅動學習筆記 同步互斥阻塞

2021-09-29 21:21:33 字數 999 閱讀 7322

linux驅動如果多個程序同時訪問,會導致不可預料的後果,所以需要一些機制來限制這種情況發生

atomic_dec_and_test函式執行的時候,不會跳轉到別的執行緒執行,所以是安全的

1、定義乙個原子變數,並初始化為1

atomic_t v =

atomic_init(1

);2、原子變數自減1

atomic_dec

(&v)

;3、原子變數自加1

atomic_inc

(&v)

;4、讀取原子變數的值

atomic_read

(&v)

;5、原子變數自減1,並與0比較,如果為0則返回true,否則返回false

atomic_dec_and_test

(&v)

;

static

declare_mutex

(button_lock)

;//定義互斥鎖訊號量

//如果無法獲取訊號量就立即休眠

down_trylock

(&button_lock)

//如果無法獲取訊號量就休眠

down

(&button_lock)

;//釋放訊號量up(

&button_lock)

;

//應用程式中,開啟檔案時加入o_nonblock屬性

fd =

open

("/dev/buttons"

, o_rdwr | o_nonblock);/*

在驅動的open函式,判斷檔案屬性

如果檔案有o_nonblock屬性,

則使用非阻塞的down_trylock,在讀取不到資料或是寫入緩衝區已滿會馬上return,而不會阻塞等待。

*/if

(file->f_flags & o_nonblock)

linux 同步 互斥 概念

相交程序之間的關係主要有兩種,同步與互斥。所謂互斥,是指散步在不同程序之間的若干程式片斷,當某個程序執行其中乙個程式片段時,其它程序就不能執行它 們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。所謂同步,是指散步在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的 某種先後...

Linux 互斥與同步

使用互斥鎖之前必須要建立乙個鎖的物件。互斥鎖的型別為pthread mutex t,建立乙個變數就是建立了乙個互斥鎖,我們通過這個變數建立開鎖和解鎖的聯絡。但這個鎖還不能夠直接使用,需要對其進行初始化。我們對建立好的鎖進行初始化的方法有兩種 第二個引數attr 如果傳入null,互斥鎖的屬性設定為預...

Linux 執行緒同步 互斥量(互斥鎖)

1 執行緒同步的目的是不管執行緒之間的執行如何穿插,其執行結果都是正確的。即保證多執行緒執行下結果的確定性。2 同步就是讓所有執行緒按照一定的規則執行,使得其正確性和效率都有跡可循,即執行緒同步就是對執行緒之間的穿插進行控制。3 每個物件都對應於乙個 互斥鎖 的標記,這個標記用來保證在任一時刻,只能...