驅動篇 併發(三)

2021-10-10 16:43:58 字數 1146 閱讀 3747

互斥體

盡 管 信 號 量 已 經 可 以 實 現 互 斥 的 功 能 , 而 且 包 含 declare_mutex() 、init_mutex ()等定義訊號量的巨集或函式, 從名字上看就體現出了互斥體的概念, 但是mutex 在 linux 核心中還是真實地存在的

下面**定義名為 my_mutex 的互斥體並初始化它。

struct mutex my_mutex;

mutex_init

(&my_mutex)

;

下面的兩個函式用於獲取互斥體。

void fastcall mutex_lock

(struct mutex *lock)

;int fastcall mutex_lock_interruptible

(struct mutex *lock)

;int fastcall mutex_trylock

(struct mutex *lock)

;mutex_lock

()與 mutex_lock_interruptible

()的區別和 down

()與 down_trylock

()的區別

完全一致,前者引起的睡眠不能被訊號打斷,而後者可以。mutex_trylock

()用於嘗試

獲得 mutex,獲取不到 mutex 時不會引起程序睡眠。

下列函式用於釋放互斥體。

void fastcall mutex_unlock

(struct mutex *lock)

;

mutex 的使用方法和訊號量用於互斥的場合完全一樣,如下所示:

struct mutex my_mutex;

//定義 mutex

mutex_init

(&my_mutex)

;//初始化 mutex

mutex_lock

(&my_mutex)

;//獲取 mutex..

.//臨界資源

mutex_unlock

(&my_mutex)

;//釋放 mutex

linux裝置驅動學習(三) 併發控制

1.併發介紹 一般來說,作業系統都是支援併發執行能力的,多個執行單元訪問同乙個模組時,如果不能支援併發,則會讓這個模組功能紊亂,像讀寫操作時。兩個使用者同時讀寫,那麼可能乙個使用者執行讀操作時,另乙個使用者可以執行了它的寫操作,這就會出現功能不協調的情況。因此這裡通過併發,將 放在臨界區,通過特定的...

Linux 驅動篇 字元驅動裝置01(框架篇)

定義乙個file operations結構體型別的變數 並填充owner函式 open函式 write函式 static int drvledopen struct inode inode,struct file file static ssize t drvledwrite struct file...

Go語言 併發篇

go語言 併發篇 2012 06 06 09 55 by 軒脈刃,當被問到為什麼用go語言,一定不得不提的是go語言的併發程式編寫。在c語言中編寫非常繁瑣複雜的併發程式在go語言中總是顯得如此便捷。go中併發程式依靠的是兩個 goroutine和channel 對於初學者,goroutine直接理解...