新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 進程間通信之: 信號量

        進程間通信之: 信號量

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257125.htm

        3.使用實例

        本實例說明的概念以及基本用法。在實例程序中,首先創建一個子進程,接下來使用來控制兩個進程(父子進程)之間的執行順序。

        因為相關的函數調用接口比較復雜,我們可以將它們封裝成二維單個信號量的幾個基本函數。它們分別為信號量初始化函數(或者信號量賦值函數)init_sem()、P操作函數sem_p()、V操作函數sem_v()以及刪除信號量的函數del_sem()等,具體實現如下所示:

        /*sem_com.c*/

        #includesem_com.h

        /*信號量初始化(賦值)函數*/

        intinit_sem(intsem_id,intinit_value)

        {

        unionsemunsem_union;

        sem_union.val=init_value;/*init_value為初始值*/

        if(semctl(sem_id,0,SETVAL,sem_union)==-1)

        {

        perror(Initializesemaphore);

        return-1;

        }

        return0;

        }

        /*從系統中刪除信號量的函數*/

        intdel_sem(intsem_id)

        {

        unionsemunsem_union;

        if(semctl(sem_id,0,IPC_RMID,sem_union)==-1)

        {

        perror(Deletesemaphore);

        return-1;

        }

        }

        /*P操作函數*/

        intsem_p(intsem_id)

        {

        structsembufsem_b;

        sem_b.sem_num=0;/*單個信號量的編號應該為0*/

        sem_b.sem_op=-1;/*表示P操作*/

        sem_b.sem_flg=SEM_UNDO;/*系統自動釋放將會在系統中殘留的信號量*/

        if(semop(sem_id,sem_b,1)==-1)

        {

        perror(Poperation);

        return-1;

        }

        return0;

        }

        /*V操作函數*/

        intsem_v(intsem_id)

        {

        structsembufsem_b;

        sem_b.sem_num=0;/*單個信號量的編號應該為0*/

        sem_b.sem_op=1;/*表示V操作*/

        sem_b.sem_flg=SEM_UNDO;/*系統自動釋放將會在系統中殘留的信號量*/

        if(semop(sem_id,sem_b,1)==-1)

        {

        perror(Voperation);

        return-1;

        }

        return0;

        }

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        數字通信相關文章:數字通信原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 天峨县| 黑水县| 离岛区| 阜康市| 金华市| 三河市| 中卫市| 资中县| 大同县| 新安县| 康定县| 镇原县| 来安县| 区。| 广饶县| 林口县| 乐清市| 通江县| 英山县| 龙门县| 宁乡县| 闽清县| 西丰县| 姜堰市| 怀安县| 阳高县| 顺义区| 凤翔县| 金湖县| 曲阳县| 莱州市| 卓资县| 应城市| 通河县| 山阳县| 阿巴嘎旗| 凭祥市| 科尔| 赤城县| 溧阳市| 怀集县|