新聞中心

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

        進程間通信之: 信號量

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

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

        現在我們調用這些簡單易用的接口,可以輕松解決控制兩個進程之間的執行順序的同步問題。實現代碼如下所示:

        /*fork.c*/

        #includesys/types.h>

        #includeunistd.h>

        #includestdio.h>

        #includestdlib.h>

        #includesys/types.h>

        #includesys/ipc.h>

        #includesys/shm.h>

        #defineDELAY_TIME3/*為了突出演示效果,等待幾秒鐘,*/

        intmain(void)

        {

        pid_tresult;

        intsem_id;

        sem_id=(ftok(.,'a'),1,0666|IPC_CREAT);/*創建一個*/

        init_sem(sem_id,0);

        /*調用fork()函數*/

        result=fork();

        if(result==-1)

        {

        perror(Forkn);

        }

        elseif(result==0)/*返回值為0代表子進程*/

        {

        printf(Childprocesswillwaitforsomeseconds...n);

        sleep(DELAY_TIME);

        printf(Thereturnedvalueis%dinthechildprocess(PID=%d)n,

        result,getpid());

        sem_v(sem_id);

        }

        else/*返回值大于0代表父進程*/

        {

        sem_p(sem_id);

        printf(Thereturnedvalueis%dinthefatherprocess(PID=%d)n,

        result,getpid());

        sem_v(sem_id);

        del_sem(sem_id);

        }

        exit(0);

        }

        讀者可以先從該程序中刪除掉相關的代碼部分并觀察運行結果。

        $./simple_fork

        Childprocesswillwaitforsomeseconds…/*子進程在運行中*/

        Thereturnedvalueis4185inthefatherprocess(PID=4184)/*父進程先結束*/

        […]$Thereturnedvalueis0inthechildprocess(PID=4185)/*子進程后結束了*/

        再添加的控制部分并運行結果。

        $./sem_fork

        Childprocesswillwaitforsomeseconds…

        /*子進程在運行中,父進程在等待子進程結束*/

        Thereturnedvalueis0inthechildprocess(PID=4185)/*子進程結束了*/

        Thereturnedvalueis4185inthefatherprocess(PID=4184)/*父進程結束*/

        本實例說明使用信號量怎么解決多進程之間存在的同步問題。我們將在后面講述的共享內存和消息隊列的實例中,看到使用信號量實現多進程之間的互斥。

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

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



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 洪江市| 湟中县| 康马县| 淳化县| 霍邱县| 禹城市| 金阳县| 重庆市| 镇康县| 惠州市| 白城市| 长岭县| 黔西县| 鲁山县| 满洲里市| 喀喇| 阳朔县| 阜城县| 祥云县| 莒南县| 宣威市| 嫩江县| 遂溪县| 马公市| 平湖市| 韶关市| 阿勒泰市| 嫩江县| 新泰市| 剑阁县| 塘沽区| 句容市| 郎溪县| 新乡市| 枝江市| 竹山县| 故城县| 保亭| 金堂县| 寿阳县| 天津市|