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