Linux 内核 up down,linux同步机制之信号量down 和up
信號量(semaphore)
Linux內核的信號量在概念和原理上和用戶態的System V的IPC機制信號量是相同的,不過他絕不可能在內核之外使用,因此他和System V的IPC機制信號量毫不相干。
信號量在創建時需要設置一個初始值,表示同時能有幾個任務能訪問該信號量保護的共享資源,初始值為1就變成互斥鎖(Mutex),即同時只能有一個任務能訪問信號量保護的共享資源。
一個任務要想訪問共享資源,首先必須得到信號量,獲取信號量的操作將把信號量的值減1,若當前信號量的值為負數,表明無法獲得信號量,該任務必須掛起在 該信號量的等待隊列等待該信號量可用;若當前信號量的值為非負數,表示能獲得信號量,因而能即時訪問被該信號量保護的共享資源。
當任務訪問完被信號量保護的共享資源后,必須釋放信號量,釋放信號量通過把信號量的值加1實現,如果信號量的值為非正數,表明有任務等待當前信號量,因此他也喚醒所有等待該信號量的任務。
信號量的API有:
DECLARE_MUTEX(name)
該宏聲明一個信號量name并初始化他的值為1,即聲明一個互斥鎖。
DECLARE_MUTEX_LOCKED(name)
該宏聲明一個互斥鎖name,但把他的初始值設置為0,即鎖在創建時就處在已鎖狀態。因此對于這種鎖,一般是先釋放后獲得。
void sema_init (struct semaphore *sem, int val);
該函用于數初始化設置信號量的初值,他設置信號量sem的值為val。
void init_MUTEX (struct semaphore *sem);
總結
以上是生活随笔為你收集整理的Linux 内核 up down,linux同步机制之信号量down 和up的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过kvm创建qcow2格式的镜像文件
- 下一篇: 【新品发布】研扬科技首款深度学习AI服务