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 每個物件都對應於乙個 互斥鎖 的標記,這個標記用來保證在任一時刻,只能...