linux signal up/down/down_interruptiable\down_uninterruptiable使用

在Linux內核中,down,?down_interruptible,?down_killable, 和?up?是用于操作信號量(semap hores)的函數,它們用于進程同步和互斥。以下是對這些函數的簡要說明。

1,down(&sem):
這個函數用于獲取信號量。如果信號量的值大于0,它會減少信號量的計數并立即返回。如果信號量的值為0,調用者會被阻塞,直到信號量變為可用或者直到信號量被釋放。


2,down_interruptible(&sem):
類似于down,但是它是可中斷的。如果信號量的值為0,并且進程收到一個信號(比如用戶按下Ctrl+C),down_interruptible會失敗并返回-EINTR,而不是一直阻塞。


3,down_killable(&sem):
這個函數在Linux內核2.6.25之后引入,它類似于down_interruptible,但是它只響應致命信號(比如SIGKILL)。如果進程收到一個致命信號,down_killable會失敗并返回-EINTR。

4,down_uninterruptible(&sem):
這個函數實際上并不存在標準的Linux內核API中。通常,down函數本身就是不可中斷的,除非在特定的情況下,內核代碼可能提供了一個自定義的不可中斷版本,但這不是標準做法。

5,up(&sem):
這個函數用于釋放信號量,增加信號量的計數。如果其他進程或線程正在等待這個信號量,它們中的一個可能會被喚醒。

代碼實現

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/semaphore.h>

static DECLARE_MUTEX(my_semaphore);

static int __init my_module_init(void)
{
? ? init_MUTEX(&my_semaphore); // 初始化信號量為1
? ? return 0;
}

static void __exit my_module_exit(void)
{
? ? up(&my_semaphore); // 釋放信號量
}

static int my_function(void)
{
? ? if (down_interruptible(&my_semaphore)) {
? ? ? ? // 如果信號量獲取被中斷,處理中斷
? ? ? ? return -EINTR;
? ? }

? ? // 信號量獲取成功,執行臨界區代碼

? ? ?fun_test();

? ? up(&my_semaphore); // 釋放信號量
? ? return 0;
}

module_init(my_module_init);
module_exit(my_module_exit);

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/pingmian/75701.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75701.shtml
    英文地址,請注明出處:http://en.pswp.cn/pingmian/75701.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    使用人工智能大模型DeepSeek,如何進行論文潤色和去重?

    今天我們學習人工智能&#xff0c;如何協助我們進行論文潤色和去重。手把手的學習視頻地址請訪問https://edu.csdn.net/learn/40402/666422 第一步在騰訊元寶對話框中輸入如何協助老師做論文潤色&#xff0c;通過提問&#xff0c;我們了解了老師寫論文潤色的步驟和建議。潤色的…

    UE5 Simulation Stage

    首先將Grid2D創建出來&#xff0c;然后設置值&#xff0c;Grid2D類似于在Niagara系統中的RenderTarget2D&#xff0c;可以進行繪制&#xff0c;那么設置大小為512 * 512 開啟Niagara粒子中的Simulation Stage 然后開始編寫我們的自定義模塊 模塊很簡單&#xff0c;TS就是Textur…

    OpenCV 圖形API(6)將一個矩陣(或圖像)與一個標量值相加的函數addC()

    操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 addC 函數將給定的標量值加到給定矩陣的每個元素上。該功能可以用矩陣表達式替換&#xff1a; dst src1 c \texttt{dst} \texttt{src1} \te…

    多GPU訓練

    寫在前面 限于財力不足&#xff0c;本機上只有一個 GPU 可供使用&#xff0c;因此這部分的代碼只能夠稍作了解&#xff0c;能夠使用的 GPU 也只有一個。 多 GPU 的數據并行&#xff1a;有幾張卡&#xff0c;對一個小批量數據&#xff0c;有幾張卡就分成幾塊&#xff0c;每個 …

    0基礎 | 硬件 | 電源系統 一

    降壓電路LDO 幾乎所有LDO都是基于此拓撲結構 圖 拓撲結構 LDO屬于線性電源&#xff0c;通過控制開關管的導通程度實現穩壓&#xff0c;輸出紋波小&#xff0c;無開關噪聲 線性電源&#xff0c;IoutIin&#xff0c;發熱功率P電壓差△U*電流I&#xff0c;轉換效率Vo/Vi LDO不適…

    mysql數據庫中getshell的方式總結

    mysql數據庫中getshell的方式總結 MySQL版本大于5.0&#xff0c;MySQL 5.0版本以上會創建日志文件,我們通過修改日志文件的全局變量,就可以GetSHELL,下面這篇文章主要給大家介紹了關于mysql數據庫中getshell的方式,需要的朋友可以參考下 outfile和dumpfile寫shell 利用條件 …

    基于Python的微博數據采集

    摘要 本系統通過逆向工程微博移動端API接口,實現了對熱門板塊微博內容及用戶評論的自動化采集。系統采用Requests+多線程架構,支持遞歸分頁采集和動態請求頭模擬,每小時可處理3000+條數據記錄。關鍵技術特征包括:1)基于max_id的評論分頁遞歸算法 2)HTML標簽清洗正則表達…

    WiFi加密協議

    目錄 1. 認證(Authentication)? ?1.1 開放系統認證(Open System Authentication)? 1.2 共享密鑰認證(Shared Key Authentication)? ?1.3 802.1X/EAP認證(企業級認證)? ?2. 關聯(Association)? ?3. 加密協議(Security Handshake)? ?整體流程總結?…

    MySQL篇(六)MySQL 分庫分表:應對數據增長挑戰的有效策略

    MySQL篇&#xff08;六&#xff09;MySQL 分庫分表&#xff1a;應對數據增長挑戰的有效策略 MySQL篇&#xff08;六&#xff09;MySQL 分庫分表&#xff1a;應對數據增長挑戰的有效策略一、引言二、為什么需要分庫分表2.1 性能瓶頸2.2 存儲瓶頸2.3 高并發壓力 三、分庫分表的方…

    極限編程(XP)簡介及其價值觀與最佳實踐

    目錄 一、什么是極限編程&#xff08;XP&#xff09;二、極限編程的核心價值觀1. 溝通2. 簡單3. 反饋4. 勇氣 三、極限編程的12個最佳實踐1. 結對編程2. 40小時工作制3. 簡單設計4. 代碼規范5. 測試驅動開發&#xff08;TDD&#xff09;6. 系統隱喻7. 持續集成8. 重構9. 客戶在…

    Java進階-day06:反射、注解與動態代理深度解析

    目錄 一、反射機制&#xff1a;Java的自我認知能力 1.1 認識反射 1.2 獲取Class對象 1.3 獲取類的成分 二、注解&#xff1a;Java的元數據機制 2.1 注解概述 2.2 元注解 2.3 注解解析 2.4 注解的實際應用 三、動態代理&#xff1a;靈活的間接訪問機制 3.1 為什么需要…

    Nacos注冊中心AP模式核心源碼分析(集群模式)

    文章目錄 概述一、客戶端新注冊實例信息在集群間同步二、服務端集群節點信息在集群間同步2.1、DistroMapper2.2、ProtocolManager2.3、ServerListManager2.4、RaftPeerSet 三、客戶端實例狀態信息在集群間同步四、服務端新節點上線同步集群數據 概述 在Nacos集群模式下&#xf…

    vscode和cursor對ubuntu22.04的remote ssh和X-Windows的無密碼登錄

    這里寫自定義目錄標題 寫在前面需求的描述問題的引出 昨天已使能自動登錄上午我的改變UBUNTU 22.04關閉密碼規則一&#xff1a;修改 /etc/pam.d/common-password 文件二&#xff1a;修改 /etc/security/pwquality.conf 文件方法三&#xff1a;禁用 pam_pwquality.so 模塊 vscod…

    論文閱讀:基于增強通用深度圖像水印的混合篡改定位技術 OmniGuard

    一、論文信息 論文名稱:OmniGuard: Hybrid Manipulation Localization via Augmented Versatile Deep Image Watermarking作者團隊:北京大學發表會議:CVPR2025論文鏈接:https://arxiv.org/pdf/2412.01615二、動機與貢獻 動機: 隨著生成式 AI 的快速發展,其在圖像編輯領…

    一周學會Pandas2 Python數據處理與分析-NumPy數組創建

    鋒哥原創的Pandas2 Python數據處理與分析 視頻教程&#xff1a; 2025版 Pandas2 Python數據處理與分析 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili NumPy數組創建最常用的方式是直接創建&#xff0c; numpy 可以直接創建或者將 python的其他元素轉為 array 對象。 下…

    【全球首發】DeepSeek谷歌版1.1.5 - 免費GPT-4級別AI工具

    【全球首發】DeepSeek谷歌版1.1.5 - 免費GPT-4級別AI工具 資源簡介 DeepSeek谷歌版1.1.5是目前全球領先的免費AI助手&#xff0c;性能超越國內主流AI產品&#xff0c;提供類似GPT-4的智能體驗。 版本信息 最新版本&#xff1a;1.1.5&#xff08;2024最新版&#xff09;應用…

    小程序29-事件穿參-mark 自定義數據

    小程序進行事件傳參的時候&#xff0c;除了使用 data-*屬性 傳遞參數外&#xff0c;還可以 使用 mark 標記傳遞參數 mark 是一種自定義屬性&#xff0c;可以在組件上添加&#xff0c;用于來識別具體觸發事件的 target 節點。同時 mark 還可以用于承載一些自定義數據 在組件上使…

    高級:分布式系統面試題精講

    一、引言 分布式系統在現代軟件開發中占據重要地位&#xff0c;其設計和實現需要考慮多個關鍵因素。面試官通過相關問題&#xff0c;考察候選人對分布式系統核心概念的理解、實際應用能力以及在復雜場景下的問題解決能力。本文將深入分析分布式系統的CAP定理、一致性協議、分布…

    【Android Studio 下載 Gradle 失敗】

    路雖遠行則將至&#xff0c;事雖難做則必成 一、事故現場 下載Gradle下載不下來&#xff0c;沒有Gradle就無法把項目編譯為Android應用。 二、問題分析 觀察發現下載時長三分鐘&#xff0c;進度條半天沒動&#xff0c;說明這個是國外的東西&#xff0c;被墻住了&#xff0c;需…

    系統思考:思考的快與慢

    在做重大決策之前&#xff0c;什么原因一定要補充碳水化合物&#xff1f;人類的大腦其實有兩套運作模式&#xff1a;系統1&#xff1a;自動駕駛模式&#xff0c;依賴直覺&#xff0c;反應快但易出錯&#xff1b;系統2&#xff1a;手動駕駛模式&#xff0c;理性嚴謹&#xff0c;…