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

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

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

信號量是一個特殊的變量,程序?qū)ζ湓L問都是原子操作,且只允許對它進(jìn)行等待(即 P(信號變量))和發(fā) 送(即 V(信號變量))信息操作。最簡單的信號量是只能取 0 和 1 的變量,這也是信號量最常見的一種形式, 叫做二進(jìn)制信號量。而可以取多個正整數(shù)的信號量被稱為通用信號量。這里主要討論二進(jìn)制信號量。 由于信號量只能進(jìn)行兩種操作等待和發(fā)送信號,即 P(sv)和 V(sv),他們的行為是這樣的: P(sv):如果 sv 的值大于零,就給它減 1;如果它的值為零,就掛起該進(jìn)程的執(zhí)行 V(sv):如果有其他進(jìn)程因等待 sv 而被掛起,就讓它恢復(fù)運(yùn)行,如果沒有進(jìn)程因等待 sv 而掛起,就給它加 1。

信號燈也叫信號量,它能夠用來同步進(jìn)程的動作,不能傳輸數(shù)據(jù)。它的應(yīng)用場景就像紅綠燈,控制各 進(jìn)程使用共享資源的順序。Posix 無名信號燈用于線程同步, Posix 有名信號燈,System V 信號燈。信號燈 相當(dāng)于一個值大于或等于 0 計數(shù)器,信號燈值大于 0,進(jìn)程就可以申請資源,信號燈值-1,如果信號燈值為 0,一個進(jìn)程還想對它進(jìn)行-1,那么這個進(jìn)程就會阻塞,直到信號燈值大于 1

使用 System V 信號量的步驟如下:

1. 使用 semget()創(chuàng)建或打開一個信號燈集。

2. 使用 semctl()初始化信號燈集,。

3. 使用 semop()操作信號燈值,即進(jìn)行 P/V 操作。

P 操作:申請資源,申清完后信號燈值-1;

V 操作:釋放資源,釋放資源后信號燈值+1

?Linux 提供了一組精心設(shè)計的信號量接口來對信號進(jìn)行操作,它們不只是針對二進(jìn)制信號量,下面將會 對這些函數(shù)進(jìn)行介紹,但請注意,這些函數(shù)都是用來對成組的信號量值進(jìn)行操作的。它們聲明在頭文件 sys/sem.h 中。

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

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

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

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

?實(shí)驗(yàn)代碼:

?指定哪個進(jìn)程運(yùn)行,可以使用進(jìn)程間通信的知識,或者使用信號量,這里以使用信號量為例:

?

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <unistd.h>
union semun
{
    int val;
};
int main(void)
{
    int semid;
    int key;
    pid_t pid;
    struct sembuf sem;
    union semun semun_union;
    key = ftok("./a.c", 0666);
    semid = semget(key, 1, 0666 | IPC_CREAT);
    semun_union.val = 0;
    semctl(semid, 0, SETVAL, semun_union);
    pid = fork();
    if (pid > 0)
    {
        sem.sem_num = 0;
        sem.sem_op = -1;
        sem.sem_flg = 0;
        semop(semid, &sem, 1);
        printf("This is parents\n");
        sem.sem_num = 0;
        sem.sem_op = 1;
        sem.sem_flg = 0;
        semop(semid, &sem, 1);
    }
    if (pid == 0)
    {
        sleep(2);
        sem.sem_num = 0;
        sem.sem_op = 1;
        sem.sem_flg = 0;
        semop(semid, &sem, 1);
        printf("This is son\n");
    }
    return 0;
}

編譯運(yùn)行程序如下圖所示:

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

?信號量是一個特殊的變量,程序?qū)ζ湓L問都是原子操作,且只允許對它進(jìn)行等待(即 P(信號變量))和發(fā) 送(即 V(信號變量))信息操作。我們通常通過信號來解決多個進(jìn)程對同一資源的訪問競爭的問題,使在任一 時刻只能有一個執(zhí)行線程訪問代碼的臨界區(qū)域,也可以說它是協(xié)調(diào)進(jìn)程間的對同一資源的訪問權(quán),也就是 用于同步進(jìn)程的。文章來源地址http://www.zghlxwxcb.cn/news/detail-468030.html

到了這里,關(guān)于linux進(jìn)程間通信(信號量)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(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)程間通信之共享內(nèi)存/消息隊(duì)列/信號量

    【Linux】進(jìn)程間通信之共享內(nèi)存/消息隊(duì)列/信號量

    共享內(nèi)存是通過讓不同的進(jìn)程看到同一個內(nèi)存塊的方式。 我們知道,每一個進(jìn)程都會有對應(yīng)的PCB-task_struct ,獨(dú)立的進(jìn)程地址空間,然后通過頁表將地址映射到物理內(nèi)存中。此時我們就可以讓OS在內(nèi)存中申請一塊空間,然后將創(chuàng)建好的內(nèi)存空間映射到進(jìn)程的地址空間中,兩個需

    2024年02月05日
    瀏覽(28)
  • 【Linux】進(jìn)程間通信——system V共享內(nèi)存 | 消息隊(duì)列 | 信號量

    【Linux】進(jìn)程間通信——system V共享內(nèi)存 | 消息隊(duì)列 | 信號量

    共享內(nèi)存是一種在多個進(jìn)程之間進(jìn)行進(jìn)程間通信的機(jī)制。它允許多個進(jìn)程訪問相同的物理內(nèi)存區(qū)域,從而實(shí)現(xiàn)高效的數(shù)據(jù)交換和通信。 因?yàn)?進(jìn)程具有獨(dú)立性(隔離性) ,內(nèi)核數(shù)據(jù)結(jié)構(gòu)包括對應(yīng)的代碼、數(shù)據(jù)與頁表都是獨(dú)立的。OS系統(tǒng)為了讓進(jìn)程間進(jìn)行通信,必須讓不同的進(jìn)

    2024年02月15日
    瀏覽(23)
  • Linux之進(jìn)程間通信——system V(共享內(nèi)存、消息隊(duì)列、信號量等)

    Linux之進(jìn)程間通信——system V(共享內(nèi)存、消息隊(duì)列、信號量等)

    本文介紹了另一種進(jìn)程間通信——system V,主要介紹了共享內(nèi)存,消息隊(duì)列、信號量,當(dāng)然消息隊(duì)列了信號量并非重點(diǎn),簡單了解即可。 共享內(nèi)存 :不同的進(jìn)程為了進(jìn)行通信看到的同一個內(nèi)存塊,該內(nèi)存塊被稱為共享內(nèi)存。 進(jìn)程具有獨(dú)立性,它的內(nèi)核數(shù)據(jù)結(jié)構(gòu)包括對應(yīng)的代

    2024年02月08日
    瀏覽(28)
  • 【Linux】詳解進(jìn)程通信中信號量的本質(zhì)&&同步和互斥的概念&&臨界資源和臨界區(qū)的概念

    【Linux】詳解進(jìn)程通信中信號量的本質(zhì)&&同步和互斥的概念&&臨界資源和臨界區(qū)的概念

    ???????? 訪問資源在安全的前提下,具有一定的順序性,就叫做同步 。在多道程序系統(tǒng)中,由于資源有限,進(jìn)程或線程之間可能產(chǎn)生沖突。同步機(jī)制就是為了解決這些沖突,保證進(jìn)程或線程之間能夠按照既定的順序訪問共享資源。同步機(jī)制有助于避免競態(tài)條件和死鎖(

    2024年04月25日
    瀏覽(90)
  • 【C++】Windows下共享內(nèi)存加信號量實(shí)現(xiàn)進(jìn)程間同步通信

    【C++】Windows下共享內(nèi)存加信號量實(shí)現(xiàn)進(jìn)程間同步通信

    目錄 一,函數(shù)清單 1.CreateFileMapping?方法 2.OpenFileMapping?方法 3.MapViewOfFile?方法 4.UnmapViewOfFile?方法 5.CreateSemaphore?方法 6.?OpenSemaphore?方法 7.WaitForSingleObject?方法 8.ReleaseSemaphore?方法 9.CloseHandle?方法 10.GetLastError?方法 二,單共享內(nèi)存單信號量-進(jìn)程間單向通信 共享內(nèi)存管理文

    2024年02月08日
    瀏覽(24)
  • linux中互斥鎖,自旋鎖,條件變量,信號量,與freeRTOS中的消息隊(duì)列,信號量,互斥量,事件的區(qū)別

    linux中互斥鎖,自旋鎖,條件變量,信號量,與freeRTOS中的消息隊(duì)列,信號量,互斥量,事件的區(qū)別

    對于目前主流的RTOS的任務(wù),大部分都屬于并發(fā)的線程。 因?yàn)镸CU上的資源每個任務(wù)都是共享的,可以認(rèn)為是單進(jìn)程多線程模型。 【freertos】003-任務(wù)基礎(chǔ)知識 在沒有操作系統(tǒng)的時候兩個應(yīng)用程序進(jìn)行消息傳遞一般使用全局變量的方式,但是如果在使用操作系統(tǒng)的應(yīng)用中用全局變

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

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

    進(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日
    瀏覽(21)
  • 一文搞定Linux線程間通訊 / 線程同步方式-互斥鎖、讀寫鎖、自旋鎖、信號量、條件變量、信號等等

    目錄 線程間通訊 / 線程同步方式 鎖機(jī)制 互斥鎖(Mutex) 讀寫鎖(rwlock) 自旋鎖(spin) 信號量機(jī)制(Semaphore) 條件變量機(jī)制 信號(Signal) 線程間通訊 / 線程同步方式 p.s 以下有很多段落是直接引用,沒有使用 markdown 的 “引用” 格式,出處均已放出。 參考 / 引用: 100as

    2024年02月10日
    瀏覽(24)
  • 線程同步-信號量-互斥量-條件變量

    線程同步-信號量-互斥量-條件變量

    線程同步其實(shí)實(shí)現(xiàn)的是線程排隊(duì)。 防止線程同步訪問共享資源造成沖突。 多個線程訪問共享資源的代碼有可能是同一份代碼,也有可能是不同的代碼;無論是否執(zhí)行同一份代碼,只要這些線程的代碼訪問同一份可變的共享資源,這些線程之間就需要同步。 1. 問題 同一個進(jìn)程

    2023年04月16日
    瀏覽(22)
  • TinyWebServer學(xué)習(xí)筆記-互斥鎖、信號量、條件變量

    網(wǎng)站不可能是單線程的,否則網(wǎng)站的性能和響應(yīng)都會收到嚴(yán)重的影響。因此,這個項(xiàng)目一定是運(yùn)行在多線程條件下的。而在多線程條件下,對共享資源的互斥訪問就極其重要。 首先,我們要明確資源的使用一般有三個步驟: 1、獲取資源 2、使用資源 3、釋放資源 然而,大多

    2024年02月07日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包