<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Linux線程

      線程

      1.1 線程概述

      1.2 線程常用API

      image

      線程方法使用

      創建線程

      #include <pthread.h>
      int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
      //返回值:若成功返回0,否則返回錯誤編號
      
      詳情介紹:
      ??當pthread_create成功返回時,由tidp指向的內存單元被設置為新創建線程的線程ID。attr參數用于定制各種不同的線程屬性,暫可以把它設置為NULL,以創建默認屬性的線程。
      
      ??新創建的線程從start_rtn函數的地址開始運行,該函數只有一個無類型指針參數arg。如果需要向start_rtn函數傳遞的參數不止一個,那么需要把這些參數放到一個結構中,然后把這個結構的地址作為arg參數傳入。
      
      

      3.線程等待

      線程被阻塞

      #include <pthread.h>
      int pthread_join(pthread_t thread, void **rval_ptr);
      // 返回值:若成功返回0,否則返回錯誤編號
      
      
      調用這個函數的線程將一直阻塞,直到指定的線程調用pthread_exit、從啟動例程中返回或者被取消。如果線程簡單地從它的啟動例程返回,rval_ptr將包含返回碼。如果線程被取消,由rval_ptr指定的內存單元就置為PTHREAD_CANCELED。
      
      ??可以通過調用pthread_join自動把線程置于分離狀態,這樣資源就可以恢復。如果線程已經處于分離狀態,pthread_join調用就會失敗,返回EINVAL。
      
      

      4.線程ID獲取及比較

      #include <pthread.h>
      pthread_t pthread_self(void);
      //返回值:調用線程的ID
      
      

      創建線程并且打印出它的id
      demo.cpp

      #include <stdio.h>
      #include <pthread.h>
      #include <unistd.h>
      
      void *func1(void *arg)
      {
          printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
          // 將void*強制轉換成int*然后解引用
          printf("t1:param is %d\n",*((int*)arg));
      }
      
      
      int main()
      {
          int ret;
          int param = 100;
          pthread_t t1;
      
         // int *pret = NULL;
          int pret;
          ret = pthread_create(&t1,NULL,func1,(void*)&param);
      
          if(ret==0)
          {
              printf("main:create t1 success\n");
          }
      
          // 等待線程結束后退出
          pthread_join(t1,(void**)&pret);
      
          printf("main:t1 quit:%d\n",pret);
      
          return 0;
      
      }
      

      編譯執行

      g++ -o demo demo.cpp   -pthread
      
      編譯 C++ 程序時,-pthread 是一個編譯器選項,用于告訴編譯器鏈接 POSIX 線程庫,也就是通常所說的線程庫。在 Linux 系統中,這個選項是編譯多線程程序時必須的。
      
      當你在編譯命令中加入 -pthread 選項時,它通常需要出現在編譯命令的兩個地方:
      
      在編譯(但不鏈接)時,例如 g++ -pthread -c demo.cpp,這告訴編譯器包含線程相關的代碼和頭文件。
      在鏈接時,例如 g++ -pthread demo.o -o demo,這告訴鏈接器鏈接線程庫。
      

      image

      驗證共享變量

      線程是共享進程的空間的,所以進程中的變量也是共享的,進行驗證

      寫一個共享變量,然后每個線程都給這個變量加1;
      變量等于3的時候退出,這樣有可能會拿不到3

      #include <stdio.h>
      #include <pthread.h>
      #include <unistd.h>
      //int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
      
      //這個是共享的變量
      int g_data = 0;
      
      
      
      void *func1(void *arg)
      {
      	printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
      	printf("t1:param is %d\n",*((int *)arg));
      	while(1){
      		
      		//修改共享變量
      		printf("t1: %d\n",g_data++);	
      		sleep(1);
      
      		if(g_data == 3){
      			pthread_exit(NULL);
      		}
      	}
      
      }
      
      void *func2(void *arg)
      {
      	printf("t2:%ld thread is create\n",(unsigned long)pthread_self());
      	printf("t2:param is %d\n",*((int *)arg));
      	while(1){
      
      		//修改共享的變量
      		printf("t2: %d\n",g_data++);	
      		sleep(1);
      	}
      }
      
      int main()
      {
      	int ret;
      	int param = 100;
      	pthread_t t1;
      	pthread_t t2;
      
      	ret = pthread_create(&t1, NULL, func1,(void *)&param);
      	if(ret == 0){
      		printf("main:create t1 success\n");
      	}
      
      	ret = pthread_create(&t2, NULL, func2,(void *)&param);
      	if(ret == 0){
      		printf("main:create t2 success\n");
      	}
      
      	printf("main:%ld\n",(unsigned long)pthread_self());
      	while(1){
      	
      		printf("main: %d\n",g_data++);	
      		sleep(1);
      	}
      
      	pthread_join(t1,NULL);
      	pthread_join(t2,NULL);
      
      	return 0;
      }
      
      

      image

      共享空間了,但是執行順序可能不同
      要使用鎖,來讓這個變量遞增。

      posted @ 2024-11-14 16:38  拿受用  閱讀(27)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人无码AV片在线观看不卡| 国产成人午夜在线视频极速观看| 国产高清av首播原创麻豆| 亚洲天堂一区二区三区三州| 视频一区二区三区刚刚碰| 亚洲一区二区三区自拍偷拍| 蜜芽亚洲AV无码精品国产午夜| 国产精品久久久久免费观看| 天堂av资源在线免费| 日韩高清免费一码二码三码| 成人片在线看无码不卡| 日韩人妻无码一区二区三区99 | 国产午夜福利小视频在线| 狠狠色综合播放一区二区| 亚洲熟妇精品一区二区| 亚洲一区二区三区在线播放无码 | 国产精品天干天干综合网 | 国内精品大秀视频日韩精品| 亚洲中文字幕无码av永久| 女同另类激情在线三区| 免费a级毛片18以上观看精品| 精品视频在线观看免费观看| 99精品久久毛片a片| 午夜三级成人在线观看| 久激情内射婷内射蜜桃| 日本狂喷奶水在线播放212| 亚洲第一狼人成人综合网| 亚洲国产成人精品av区按摩| 国产91精品调教在线播放| 国产一区二区三区九精品| 日韩乱码人妻无码中文字幕| 成人午夜av在线播放| 国内外精品激情刺激在线| 国产成熟女人性满足视频| 亚洲欧美日韩精品色xxx| 蜜臀午夜一区二区在线播放| 午夜高清国产拍精品福利| 好先生在线观看免费播放| 中文字幕乱码一区二区免费| 国产成人精品无缓存在线播放| 亚洲天堂av日韩精品|