中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        Linux多線程同步方法

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

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

        本文引用地址:http://www.antipu.com.cn/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)閉