色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          Linux多線程同步方法

          作者: 時(shí)間:2014-10-17 來(lái)源:網(wǎng)絡(luò) 收藏

            以下是線程的幾種同步方式:

          本文引用地址:http://cafeforensic.com/article/264051.htm

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

            1、 。

            通過(guò)使用pthread的互斥接口保護(hù)數(shù)據(jù),確保同一時(shí)間只有一個(gè)線程訪問(wèn)數(shù)據(jù)。從本質(zhì)上講是一把鎖,在訪問(wèn)共享資源前對(duì)進(jìn)行加鎖,在訪問(wèn)完成后釋放互斥量上的鎖。如下例所示,就是互斥量對(duì)共享數(shù)據(jù)的操作:

            #include

            #include

            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);//創(chuàng)建線程

            if(retval != 0){printf(“Can not create mythread1n”);

            mainshow();

            retval = pthread_join(&tid1,NULL);//等待線程mythread1結(jié)束

            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;//對(duì)共享變量的操作

            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;//對(duì)共享變量的操作

            printf(“value = %dn”,value);

            pthread_mutex_unlock(&mutex);//解鎖

            }

            2、信號(hào)量

            該信號(hào)量是Posix提供的基于內(nèi)存的信號(hào)量,它們由應(yīng)用程序分配信號(hào)量的內(nèi)存空間。如下例所示,就是信號(hào)量對(duì)共享數(shù)據(jù)的操作:

            #include

            #include

            #include

            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操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程




          關(guān)鍵詞: Linux 多線程 互斥量

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉