0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Semaphore(信號量)和Mutex(互斥)之間做選擇?

麥克泰技術(shù) ? 來源:麥克泰技術(shù) ? 2024-03-05 11:35 ? 次閱讀

在單CPU系統(tǒng)中,處理器是一個共享資源。在多個進(jìn)程之間共享處理器時,處理器的使用由調(diào)度程序控制,不存在競爭問題。但對于系統(tǒng)的其它資源而言,情況并非如此。不同的任務(wù)可能需要同時使用同一硬件外設(shè)或內(nèi)存區(qū)域。如果不控制這些公共資源的訪問,系統(tǒng)中很快就會出現(xiàn)資源爭用問題。

89b9932c-daa0-11ee-a297-92fbcf53809c.png

如何在Semaphore(信號量)和Mutex(互斥)之間做選擇,應(yīng)考慮以下的問題:

1、資源類型:

- 多個實(shí)例:如果多個任務(wù)可以同時訪問資源,請使用信號量。

- 單個實(shí)例:如果一次只有一個任務(wù)需要訪問資源,請使用互斥。

2、訪問模式:

-非排他性訪問:如果多個任務(wù)可以同時訪問資源,請使用信號量。

- 獨(dú)家訪問:如果只有一個任務(wù)需要獨(dú)家訪問資源,請使用互斥。

3、所有權(quán)要求:

- 需要所有權(quán):如果您需要強(qiáng)制執(zhí)行所有權(quán),請使用互斥,確保只有獲得互斥的任務(wù)才能釋放它。

- 無需所有權(quán):如果所有權(quán)不是問題,請使用信號量。

4、性能:

-開銷:由于所有權(quán)跟蹤和優(yōu)先級反轉(zhuǎn)預(yù)防機(jī)制,與信號量相比,Mutex通常具有更高的開銷。

- 速度:對于簡單的同步任務(wù),信號量通常更快。

5、優(yōu)先反轉(zhuǎn):

-優(yōu)先級反轉(zhuǎn):Mutexes具有防止優(yōu)先級反轉(zhuǎn)的機(jī)制(例如優(yōu)先級繼承),這在實(shí)時系統(tǒng)中可能很重要。

-無優(yōu)先級反轉(zhuǎn):信號量沒有防止優(yōu)先級反轉(zhuǎn)的內(nèi)置機(jī)制。

6、復(fù)雜性:

- 簡單性:在基本同步任務(wù)中,信號量更易于使用和理解。

- 復(fù)雜性:由于所有權(quán)和優(yōu)先級反轉(zhuǎn)考慮,Mutex可能會更加復(fù)雜。

小結(jié)

-信號量:用于對資源的非排他性訪問,以及當(dāng)一個資源的多個實(shí)例可以同時訪問時。

- 互斥:用于獨(dú)家訪問資源,當(dāng)一次只能訪問一個任務(wù)訪問資源時。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19048

    瀏覽量

    228535
  • 信號量
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    8297

原文標(biāo)題:如何在Semaphore和Mutex之間做選擇?

文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【安富萊】【RTX操作系統(tǒng)教程】第15章 互斥信號量

    第15章 互斥信號量 本章節(jié)開始講解RTX的另一個重要的資源共享機(jī)制---互斥信號量Mutex,即Mutual Exclusion的縮寫)
    發(fā)表于 01-30 17:40

    轉(zhuǎn):第23章 FreeRTOS互斥信號量

    本章節(jié)講解FreeRTOS重要的資源共享機(jī)制---互斥信號量Mutex,即MutualExclusion的縮寫)。注意,建議初學(xué)者學(xué)習(xí)完前兩個章節(jié)的信號量后再學(xué)習(xí)本章節(jié)的
    發(fā)表于 09-06 14:58

    第15章 互斥信號量

    轉(zhuǎn)rtx操作系統(tǒng) 本章節(jié)開始講解RTX的另一個重要的資源共享機(jī)制---互斥信號量Mutex,即Mutual Exclusion的縮寫)。注意,建議初學(xué)者學(xué)習(xí)完上個章節(jié)的信號量后再學(xué)習(xí)
    發(fā)表于 10-06 16:40

    芯靈思SinlinxA33開發(fā)板的Linux內(nèi)核信號量學(xué)習(xí)

    init_MUTEX_LOCKED (struct semaphore *sem);該函數(shù)也用于初始化一個互斥鎖,但它把信號量sem的值設(shè)置為0,等同于sema_init (stru
    發(fā)表于 02-20 15:50

    芯靈思SinlinxA64開發(fā)板 Linux內(nèi)核信號量學(xué)習(xí)

    信號量,并設(shè)置信號量sem的值為valvoid init_MUTEX (struct semaphore *sem);該函數(shù)用于初始化一個互斥
    發(fā)表于 03-15 16:10

    信號量互斥信號量該怎么選擇?

    既然說信號量可能會導(dǎo)致優(yōu)先級反轉(zhuǎn),那全都在工程里使用互斥信號不就行了?還要信號量干啥?大家一起用互斥信號
    發(fā)表于 08-26 03:14

    例程使用互斥信號量初始化如何設(shè)置?

    OS_MUTEXTEST_MUTEX; //定義一個互斥信號量//創(chuàng)建一個互斥信號量OSMutexCreate((OS_
    發(fā)表于 06-02 16:22

    信號量互斥鎖的區(qū)別

    互斥用于線程的互斥,信號線用于線程的同步。這是互斥信號
    發(fā)表于 11-13 17:43 ?1.3w次閱讀
    <b class='flag-5'>信號量</b>和<b class='flag-5'>互斥</b>鎖的區(qū)別

    詳解互斥信號量的概念和運(yùn)行

    1 、互 斥 信 號 1.1 互斥信號量的概念及其作用 互斥信號量的主要作用是對資源實(shí)現(xiàn)互斥
    的頭像 發(fā)表于 10-22 11:57 ?1.1w次閱讀
    詳解<b class='flag-5'>互斥</b><b class='flag-5'>信號量</b>的概念和運(yùn)行

    FreeRTOS 隊(duì)列 信號量 互斥

    文章目錄前言Queue 隊(duì)列semaphore 信號量Mutex 互斥微信公眾號前言FreeRTOS STM32CubeMX配置 內(nèi)存管理
    發(fā)表于 12-09 09:51 ?0次下載
    FreeRTOS 隊(duì)列 <b class='flag-5'>信號量</b> <b class='flag-5'>互斥</b><b class='flag-5'>量</b>

    ThreadX(六)------信號量semaphore

    APItx_semaphore_createtx_semaphore_deletetx_semaphore_gettx_semaphore_puttx_semaphore_put_notifysemaphore_demo概述ThreadX提供32位計(jì)數(shù)信號量,范圍在0到4
    發(fā)表于 12-28 19:26 ?7次下載
    ThreadX(六)------<b class='flag-5'>信號量</b><b class='flag-5'>semaphore</b>

    使用Arduino在FreeRTOS中實(shí)現(xiàn)信號量互斥的方式

    信號量互斥互斥)是用于同步、資源管理和保護(hù)資源免受損壞的內(nèi)核對象。在本教程的前半部分,我們將了解Semaphore背后的理念,以及如何以及在何處使用它。
    的頭像 發(fā)表于 08-16 15:34 ?3326次閱讀
    使用Arduino在FreeRTOS中實(shí)現(xiàn)<b class='flag-5'>信號量</b>和<b class='flag-5'>互斥</b><b class='flag-5'>量</b>的方式

    Free RTOS的互斥信號量

    二進(jìn)制信號量互斥非常相似,但確實(shí)有一些細(xì)微的區(qū)別。互斥體包含優(yōu)先級繼承機(jī)制,而二進(jìn)制信號量沒有。這使得二進(jìn)制
    的頭像 發(fā)表于 02-10 15:36 ?1079次閱讀
    Free RTOS的<b class='flag-5'>互斥</b><b class='flag-5'>信號量</b>

    使用Linux信號量實(shí)現(xiàn)互斥點(diǎn)燈

    信號量常用于控制對共享資源的訪問,有計(jì)數(shù)型信號量和二值信號量之分。初始化時信號量值大于1的,就是計(jì)數(shù)型信號量,計(jì)數(shù)型
    的頭像 發(fā)表于 04-13 15:12 ?758次閱讀
    使用Linux<b class='flag-5'>信號量</b>實(shí)現(xiàn)<b class='flag-5'>互斥</b>點(diǎn)燈

    Semaphore信號量概念及其介紹

    信號量Semaphore。信號量主要用于控制和保護(hù)任務(wù)對特定資源的訪問。
    的頭像 發(fā)表于 07-25 15:40 ?1535次閱讀
    <b class='flag-5'>Semaphore</b><b class='flag-5'>信號量</b>概念及其介紹