新聞中心

        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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长葛市| 安阳市| 贵定县| 南宫市| 香河县| 德保县| 铜川市| 宝清县| 武平县| 崇仁县| 南岸区| 宝鸡市| 聂荣县| 黑水县| 蕲春县| 青州市| 定安县| 六安市| 睢宁县| 花莲县| 诸暨市| 巨鹿县| 阜康市| 云安县| 宁安市| 延川县| 仙桃市| 梅河口市| 维西| 泰和县| 合水县| 黑山县| 梅州市| 昌江| 宁化县| 晋宁县| 麦盖提县| 勃利县| 淮南市| 尤溪县| 安化县|