新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux多線程同步方法

        Linux多線程同步方法

        作者: 時間:2011-08-11 來源:網絡 收藏

        以下是的幾種方式:

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

        1、 互斥量。

        通過使用pthread的互斥接口保護數據,確保同一時間只有一個訪問數據。互斥量從本質上講是一把鎖,在訪問共享資源前對互斥量進行加鎖,在訪問完成后釋放互斥量上的鎖。如下例所示,就是互斥量對共享數據的操作:

        #include stdio.h>
        #include pthread.h>
        int value = 5;//共享變量
        pthread_mutex_t mutex;//互斥變量
        void *mythread1();
        void mainshow();
        int main()
        {
        int retval;
        pthread_t tid1;
        retval = pthread_create(tid1,NULL,mythread1,value);//創建
        if(retval != 0){printf(“Can not create mythread1n”);
        mainshow();
        retval = pthread_join(tid1,NULL);//等待線程mythread1結束
        if(retval != 0){printf(“Can not join with mythread.n”);
        printf(“value = %dn”,value);
        return 0;
        }

        void *mythread1()
        {
        int retval;
        retval = pthread_mutex_lock(mutex);//上鎖
        value = value + 1;//對共享變量的操作
        printf(value = %dn,value);
        retval = pthread_mutex_unlock(mutex);//解鎖
        pthread_exit((void *)0);
        }


        void myshow()
        {
        int retval;
        retval = pthread_mutex_lock(mutex);//上鎖
        value = value + 1;//對共享變量的操作
        printf(“value = %dn”,value);
        pthread_mutex_unlock(mutex);//解鎖
        }

        2、信號量

        該信號量是Posix提供的基于內存的信號量,它們由應用程序分配信號量的內存空間。如下例所示,就是信號量對共享數據的操作:

        #include stdio.h>
        #include pthread.h>
        #include semaphore.h>
        int value = 5;
        sem_t sem1,sem2;
        void mainshow();
        void *mythread();
        int main()
        {
        int retval;
        pthread_t tid;
        retval = sem_init(sem1,0,0);
        retval = sem_init(sem2,0,1);
        retval =pthread_create(tid,NULL,mythread,NULL);
        mainshow();
        pthread_join(tid,NULL);


        printf(value3 = %dn,value);
        return 0;
        }


        void *mythread()
        {
        int retval;
        retval = sem_wait(sem1);
        value = value + 1;
        printf(value1 = %dn,value);
        retval = sem_post(sem2);
        pthread_exit((void *) 0);
        }


        void mainshow()
        {
        int retval;
        retval = sem_wait(sem2);
        value = value + 1;
        printf(value2 = %dn,value);
        retval = sem_post(sem1);
        }

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

        linux相關文章:linux教程




        關鍵詞: 方法 同步 線程 Linux

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 东光县| 怀仁县| 卓资县| 噶尔县| 长武县| 虎林市| 绥芬河市| 广元市| 千阳县| 苏尼特右旗| 郁南县| 卢龙县| 贵港市| 左贡县| 康马县| 邻水| 荆州市| 阳谷县| 紫金县| 浙江省| 滦南县| 三台县| 东兰县| 二连浩特市| 剑阁县| 忻州市| 小金县| 锡林郭勒盟| 文水县| 麻城市| 云龙县| 永康市| 华蓥市| 于都县| 晋中市| 金溪县| 英德市| 博白县| 乐至县| 广安市| 永平县|