国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】淺談信號量

這篇具有很好參考價值的文章主要介紹了【Linux】淺談信號量。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


tips:system V 是一套標(biāo)準(zhǔn),共享內(nèi)存,信號量,消息隊列屬于system V。

一、共享內(nèi)存的弊端

【Linux】淺談信號量,Linux,linux,運(yùn)維,服務(wù)器

進(jìn)程A和進(jìn)程B進(jìn)行通信時,假如進(jìn)程A向物理內(nèi)存的共享區(qū)寫入"Hello World",但是當(dāng)進(jìn)程A寫入了"Hello"時,進(jìn)程B就向內(nèi)存讀取了,所以只讀取到了"Hello",這就導(dǎo)致進(jìn)程A想向進(jìn)程B發(fā)送的信息,進(jìn)程B讀取不完整,導(dǎo)致了數(shù)據(jù)的不完整!

因?yàn)楣蚕韮?nèi)存是沒有任何保護(hù)機(jī)制的??!

不同于管道,管道擁有同步和互斥問題,可以解決數(shù)據(jù)不一致問題。

為了解決上述問題,先引入幾個概念。

新概念引入

  • 1.當(dāng)A和B看到的同一份資源,這份資源叫做共享資源,如果不加保護(hù),可能會導(dǎo)致數(shù)據(jù)不一致問題。
  • 2.只允許一個執(zhí)行流訪問共享資源,那么這份資源就具有互斥功能。
  • 3.如果一份資源,任何時刻只允許一個執(zhí)行流訪問,這份資源叫做臨界資源。而臨界資源,一般是內(nèi)存。比如管道也是臨界資源。
  • 4.假如有100行的代碼,我們此時在實(shí)現(xiàn)通過管道進(jìn)行進(jìn)程間通信,而我們訪問管道的方式就是通過代碼訪問的,管道又是臨界資源,所以訪問管道的那幾行代碼,5~10行代碼,才是在訪問臨界資源,而訪問臨界資源的這部分代碼,叫做臨界區(qū)。

為什么在多進(jìn)程,多線程并發(fā)打印時,打印的內(nèi)容是錯亂的??

多個進(jìn)程要向同一塊顯示器上打印信息,就先保證所有進(jìn)程都看到同一份資源。而顯示器也是文件,也屬于一份共享資源,由于沒有加以任何保護(hù),在進(jìn)程1打印的同時,進(jìn)程2也向顯示器文件打印,就造成了混亂問題。

二、理解信號量

信號量的本質(zhì)是一把計數(shù)器,類似但不等于 int count = n;

是描述臨界資源數(shù)量的多少?。?!

當(dāng)我們?nèi)タ措娪暗臅r候,我們還沒看,要先買票。買票的本質(zhì)是對資源的預(yù)定機(jī)制。
那么票數(shù)的計數(shù)器,每賣一張票,就要對計數(shù)器-1,也就意味著電影院里面的資源就少一個!
當(dāng)票數(shù)計數(shù)器為0的時候,電影院的資源就被申請完畢了。

與臨界資源(只能有一個執(zhí)行流訪問資源)相對應(yīng):
最擔(dān)心的情況就是:

  • 一份臨界資源,有多個執(zhí)行流訪問。
  • n份臨界資源,有 > n的執(zhí)行流訪問,就會出現(xiàn)第一種情況。

所以為了解決這個問題,就有了計數(shù)器的概念。
在操作系統(tǒng)的管理中,臨界資源是有限的,當(dāng)執(zhí)行流申請訪問資源時,操作系統(tǒng)就會通過分配算法給執(zhí)行流分配臨界資源,從而保證不同的執(zhí)行流訪問不同的臨界資源。并且當(dāng)臨界資源計數(shù)器 = 0時,臨界資源被申請完畢,還有執(zhí)行流想要申請臨界資源時,操作系統(tǒng)就會禁止該執(zhí)行流申請資源。

【Linux】淺談信號量,Linux,linux,運(yùn)維,服務(wù)器

所以,管道的互斥就可以解釋成:只有一個執(zhí)行流在訪問臨界資源,就叫做互斥!

結(jié)論:

  • 1.申請計數(shù)器成功,表示我當(dāng)前具有訪問資源的權(quán)限。
  • 2.申請了計數(shù)器資源,我當(dāng)前可以不訪問我要的資源,因?yàn)榇藭r我申請計數(shù)器資源是對資源的預(yù)定機(jī)制。
  • 3.計數(shù)器可以有效保證進(jìn)入臨界資源的執(zhí)行流的數(shù)量。
  • 4.每一個執(zhí)行流想要訪問臨界資源,就先申請計數(shù)器資源。程序員把這個計數(shù)器資源,叫做信號量。
  • 5.我們把值為只有0,1兩態(tài)的計數(shù)器,叫做二元計數(shù)器;本質(zhì)上就是鎖。

那為什么要讓計數(shù)器的值為1呢?
當(dāng)我們把臨界資源看成一個整體,此時就只有一個執(zhí)行流能申請到該臨界資源。整體申請,整體釋放!這就是互斥!??!


但是,要訪問臨界資源,就先申請計數(shù)器資源。

計數(shù)器資源的存在就是為了保護(hù)臨界資源只能有一個執(zhí)行流訪問的。

計數(shù)器資源也是共享資源,因?yàn)樗鼙欢鄠€執(zhí)行流看到,能被多個執(zhí)行流申請資源它要保護(hù)別人,就得先保護(hù)自己!?。?/strong>

然而, 計數(shù)器本身并不是安全的。

int count = 1;
count--;

其中count--這條語句,在c語言上就是一條代碼,但是在匯編層面上,就會被翻譯成3條語句:
1.count變量的內(nèi)容,從內(nèi)存拷貝到CPU的寄存器中
2.CPU內(nèi)對count進(jìn)行–
3.將計算結(jié)果拷貝回count變量的內(nèi)存位置。

具體怎么不安全后面會講。

原子性

我們在申請信號量資源時,本質(zhì)是對計數(shù)器–,這個操作叫做P操作。
在釋放信號量資源時,本質(zhì)是對計數(shù)器++,這個操作叫做V操作。

所以,在信號量的申請和釋放的操作,就叫做PV操作。這個操作叫做原子的?。?!

而原子性的概念簡單理解為:要么不做,要做就做完,沒有正在做的概念?。?!

為什么把PV操作叫做原子的呢?

PV操作本質(zhì)是對計數(shù)器–,++的操作。
翻譯成匯編語句后,每一條匯編語句就是原子的?。?!

因?yàn)橐粭l匯編語句,只能是要么沒有執(zhí)行,要么已經(jīng)執(zhí)行,沒有正在執(zhí)行的說法!文章來源地址http://www.zghlxwxcb.cn/news/detail-755524.html

到了這里,關(guān)于【Linux】淺談信號量的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • linux進(jìn)程間通信(信號量)

    linux進(jìn)程間通信(信號量)

    信號量是一個特殊的變量,程序?qū)ζ湓L問都是原子操作,且只允許對它進(jìn)行等待(即 P(信號變量))和發(fā) 送(即 V(信號變量))信息操作。最簡單的信號量是只能取 0 和 1 的變量,這也是信號量最常見的一種形式, 叫做二進(jìn)制信號量。而可以取多個正整數(shù)的信號量被稱為通用信號

    2024年02月07日
    瀏覽(33)
  • 【Linux】進(jìn)程間通信 -- 信號量

    【Linux】進(jìn)程間通信 -- 信號量

    信號量是什么? 本質(zhì)是一個計數(shù)器,通常用來表示公共資源中,資源數(shù)量多少的問題 公共資源:能被多個進(jìn)程同時可以訪問的資源 訪問沒有保護(hù)的公共資源:數(shù)據(jù)不一致問題(比如我想寫abc123,但是我123還沒有寫入,就讀取了abc,可能數(shù)據(jù)分開會導(dǎo)致數(shù)據(jù)無意義) 為什么要

    2024年02月16日
    瀏覽(25)
  • 【Linux篇】第十七篇——信號量

    【Linux篇】第十七篇——信號量

    前言 POSIX信號量 信號量的概念 信號量的工作原理 信號量函數(shù) 二元信號量模擬實(shí)現(xiàn)互斥功能 基于環(huán)形隊列的生產(chǎn)消費(fèi)模型 空間資源和數(shù)據(jù)資源 生產(chǎn)者和消費(fèi)者申請和釋放資源 必須遵守的兩個規(guī)則 代碼實(shí)現(xiàn) 信號量保護(hù)環(huán)形隊列的原理 將可能被多個執(zhí)行流同時訪問的資源叫

    2024年02月06日
    瀏覽(20)
  • linux(system V標(biāo)準(zhǔn))信號量

    linux(system V標(biāo)準(zhǔn))信號量

    目錄: ??????????? 1.什么是信號量 ??????????? 2.信號量的本質(zhì) 1.什么是信號量 ? 2.信號量的本質(zhì) ?什么是臨界資源呢?? 凡是倍多個執(zhí)行流同時訪問的資源就是臨界資源?。。?我們看一個問題,我們fork()之后創(chuàng)建一個子進(jìn)程,那么我們的全局變量,是不是我們父

    2024年02月07日
    瀏覽(28)
  • Linux進(jìn)程間通信【消息隊列、信號量】

    Linux進(jìn)程間通信【消息隊列、信號量】

    ?個人主頁: 北 海 ??所屬專欄: Linux學(xué)習(xí)之旅 ??操作環(huán)境: CentOS 7.6 阿里云遠(yuǎn)程服務(wù)器 在 System V 通信標(biāo)準(zhǔn)中,還有一種通信方式: 消息隊列 ,以及一種實(shí)現(xiàn)互斥的工具: 信號量 ;隨著時代的發(fā)展,這些陳舊的標(biāo)準(zhǔn)都已經(jīng)較少使用了,但作為 IPC 中的經(jīng)典知識,我們可

    2024年02月08日
    瀏覽(31)
  • 【Linux】多線程 之 POSIX信號量

    【Linux】多線程 之 POSIX信號量

    信號量又稱為 信號燈 本質(zhì)就是一個計數(shù)器,用于描述臨界資源數(shù)目的 sem: 0 - 1 - 0 若臨界資源只有1個,則sem設(shè)為1,當(dāng)要使用臨界資源時,sem由1變?yōu)?,其他人在想申請,則申請不到掛起排隊,等待釋放臨界資源時 sem由0變?yōu)? ,才可以再申請臨界資源 這種信號量稱為 二元信號

    2024年02月16日
    瀏覽(48)
  • 『Linux』第九講:Linux多線程詳解(五)_ 信號量

    『Linux』第九講:Linux多線程詳解(五)_ 信號量

    「前言」文章是關(guān)于Linux多線程方面的知識,上一篇是?Linux多線程詳解(四),今天這篇是 Linux多線程詳解(五),內(nèi)容大致是信號量,講解下面開始! 「歸屬專欄」Linux系統(tǒng)編程 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) 「楓葉先生有點(diǎn)文青病」「每篇一句」 求其上,

    2024年02月07日
    瀏覽(18)
  • linux eventfd事件通知 比信號量更好用

    linux eventfd事件通知 比信號量更好用

    ? 專欄內(nèi)容:linux下并發(fā)編程 個人主頁:我的主頁 座右銘:天行健,君子以自強(qiáng)不息;地勢坤,君子以厚德載物. 目錄 前言 概述 原理簡介 使用場景 接口說明 頭文件 參數(shù)說明 代碼演示 默認(rèn)參數(shù) 信號量模式 結(jié)尾 ? 本專欄主要分享linux下并發(fā)編程相關(guān)知識,包括多進(jìn)程,多

    2024年02月08日
    瀏覽(42)
  • 【Linux】進(jìn)程間通信——System V信號量

    【Linux】進(jìn)程間通信——System V信號量

    目錄 寫在前面的話 一些概念的理解 信號量的引入 信號量的概念及使用 ? ???????? System V信號量是一種較低級的IPC機(jī)制 ,使用的時候需要手動進(jìn)行操作和同步。在現(xiàn)代操作系統(tǒng)中,更常用的是 POSIX信號量 (通過 sem_* 系列的函數(shù)進(jìn)行操作)或更高級的同步原語(如互斥鎖

    2024年02月11日
    瀏覽(21)
  • 【linux】進(jìn)行間通信——共享內(nèi)存+消息隊列+信號量

    【linux】進(jìn)行間通信——共享內(nèi)存+消息隊列+信號量

    進(jìn)程間通信方式目前我們已經(jīng)學(xué)了匿名管道,命名管道。讓兩個獨(dú)立的進(jìn)程通信,前提是看到同一份資源。匿名管道適用于血緣關(guān)系的進(jìn)程,一個打開寫端一個打開讀端實(shí)現(xiàn)的。命名管道適用于完全獨(dú)立的進(jìn)程,打開同一份文件實(shí)現(xiàn)的。 接下來我們看看剩下的實(shí)現(xiàn)進(jìn)程間通信

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包