亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

線程的基本操作

發布時間:2020-07-05 23:20:45 來源:網絡 閱讀:395 作者:小止1995 欄目:編程語言
  1. 創建一個線程:

 進程,是并發執行的程序在執行過程中分配和管理資源的基本單位,是一個動態概念,竟爭計算機系統資源的基本單位。每一個進程都有一個自己的地址空間,即進程空間或(虛空間)。進程空間的大小 只與處理機的位數有關,一個 16 位長處理機的進程空間大小為 216 ,而 32 位處理機的進程空間大小為 232 。進程至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。

    線程,在網絡或多用戶環境下,一個服務器通常需要接收大量且不確定數量用戶的并發請求,為每一個請求都創建一個進程顯然是行不通的,——無論是從系統資源開銷方面或是響應用戶請求的效率方面來看。因此,操作系統中線程的概念便被引進了。線程,是進程的一部分,一個沒有線程的進程可以被看作是單線程的。線程有時又被稱為輕權進程或輕量級進程,也是 CPU 調度的一個基本單位。

關系:進程擁有一個完整的虛擬地址空間,不依賴于線程而獨立存在;反之,線程是進程的一部分,沒有自己的地址空間,與進程內的其他線程一起共享分配給該進程的所有資源

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

Compile and link with -pthread.

  1 #include<stdio.h>
  2 #include<pthread.h>
  3 #include<stdlib.h>
  4 void* thread_run(void* id)
  5 {
  6     while(1)
  7     {
  8         printf("this is a thread\n");
  9         sleep(1);
 10     }
 11     return (void*)0;
 12 }
 13 
 14 int main()
 15 {
 16     pthread_t tid;
 17     int ret=pthread_create(&tid,NULL,thread_run,NULL);
 18     while(1)
 19     {
 20         printf("this is main thread\n");
 21         sleep(2);
 22     }
 23     return 0;
 24 }

運行結果:兩個線程同時執行自己代碼

線程的基本操作

2.線程等待:int pthread_join(pthread_t thread, void **retval);(以阻塞形式等待)

Compile and link with -pthread.

  1 #include<stdio.h>
  2 #include<pthread.h>
  3 #include<stdlib.h>
  4 void* thread_run(void* id)
  5 {
  6     int count=5;
  7     while(count--)
  8     {
  9         printf("this is a thread\n");
 10         sleep(1);
 11     }
 12     return (void*)0;
 13 }
 14 
 15 int main()
 16 {
 17     pthread_t tid;
 18     int ret=pthread_create(&tid,NULL,thread_run,NULL);
 19     int count=10;
 20     while(count--)
 21     {
 22         printf("this is main thread\n");
 23         sleep(2);
 24     }
 25     void* retval=0;
 26     pthread_join(tid,&retval);
 27     printf("retval: %d\n",(int)retval);
 28     return 0;
 29 }

線程的基本操作

3.線程終止(4種)

(1)exit(1)直接終止進程

  1 #include<stdio.h>
  2 #include<pthread.h>
  3 #include<stdlib.h>
  4 void* thread_run(void* id)
  5 {
  6     int count=5;
  7     while(count--)
  8     {
  9         printf("this is a thread\n");
 10         sleep(1);
 11     }
 12     exit(1);
 13 }
 14 
 15 int main()
 16 {
 17     pthread_t tid;
 18     int ret=pthread_create(&tid,NULL,thread_run,NULL);
 19     int count=10;
 20     while(count--)
 21     {
 22         printf("this is main thread\n");
 23         sleep(2);
 24     }
 25     void* retval=0;
 26     pthread_join(tid,&retval);
 27     printf("retval: %d\n",(int)retval);
 28     return 0;
 29 }

運行結果

線程的基本操作

(2)pthread_exit((void*)s);

#include <pthread.h>

void pthread_exit(void *retval);

Compile and link with -pthread.

  1 #include<stdio.h>
  2 #include<pthread.h>
  3 #include<stdlib.h>
  4 void* thread_run(void* id)
  5 {
  6     int count=5;
  7     int ret=3;
  8     while(count--)
  9     {
 10         printf("this is a thread\n");
 11         sleep(1);
 12     }
 13     pthread_exit((void*)ret);
 14 }
 15 
 16 int main()
 17 {
 18     pthread_t tid;
 19     int ret=pthread_create(&tid,NULL,thread_run,NULL);
 20     int count=10;
 21     while(count--)
 22     {
 23         printf("this is main thread\n");
 24         sleep(2);
 25     }
 26     void* retval=0;
 27     pthread_join(tid,&retval);
 28     printf("retval: %d\n",(int)retval);
 29     return 0;
 30 }

線程的基本操作

(3)線程可被取消:

 #include <pthread.h>

 int pthread_cancel(pthread_t thread);

 Compile and link with -pthread.

a.被自己取消

  1 #include<stdio.h>
  2 #include<pthread.h>
  3 #include<stdlib.h>
  4 void* thread_run(void* id)
  5 {
  6     int count=5;
  7     while(count--)
  8     {
  9         printf("this is a thread\n");
 10         sleep(1);
 11     }
 12     pthread_cancel(pthread_self());
 13 }
 14 
 15 int main()
 16 {
 17     pthread_t tid;
 18     int ret=pthread_create(&tid,NULL,thread_run,NULL);
 19     int count=10;
 20     while(count--)
 21     {
 22         printf("this is main thread\n");
 23         sleep(2);
 24     }
 25     void* retval=0;
 26     pthread_join(tid,&retval);
 27     printf("retval: %d\n",(int)retval);
 28     return 0;
 29 }

線程的基本操作

b.被主線程取消

  1 #include<stdio.h>
  2 #include<pthread.h>
  3 #include<stdlib.h>
  4 void* thread_run(void* id)
  5 {
  6     int count=5;
  7     while(count--)
  8     {
  9         printf("this is a thread\n");
 10         sleep(1);
 11     }
 12 }
 13 
 14 int main()
 15 {
 16     pthread_t tid;
 17     int ret=pthread_create(&tid,NULL,thread_run,NULL);
 18     int count=3;
 19     while(count--)
 20     {
 21         printf("this is main thread\n");
 22         sleep(1);
 23     }
 24     pthread_cancel(tid);
 25     void* retval=0;
 26     pthread_join(tid,&retval);
 27     printf("retval: %d\n",(int)retval);
 28     return 0;
 29 }

線程的基本操作

 1 #include<stdio.h>
  2 #include<pthread.h>
  3 void* pthread_run1(void* arg)
  4 {
  5     int count=5;
  6     while(count--)
  7     {
  8         printf("this is a pthread,id: %d, pthread_id:%u\n",(int)arg,pthread_    self());
  9     }
 10     return (void*)1;
 11 }
 12 void* pthread_run2(void* arg)
 13 {
 14     int count=5;
 15     while(count--)
 16     {
 17         printf("this is a pthread,id: %d, pthread_id:%u\n",(int)arg,pthread_    self());
 18     }
 19     pthread_exit((void*)2);
 20 }
 21 void* pthread_run3(void* arg)
 22 {
 23     int count=5;
 24     while(count--)
 25     {
 26         printf("this is a pthread,id: %d, pthread_id:%u\n",(int)arg,pthread_    self());
 27     }
 28     pthread_cancel(pthread_self());
 29 }
 30 int main()
 31 {
 32     pthread_t tid1,tid2,tid3;
 33     pthread_create(&tid1,NULL,pthread_run1,(void*)1);
 34     pthread_create(&tid2,NULL,pthread_run2,(void*)2);
 35     pthread_create(&tid3,NULL,pthread_run3,(void*)3);
 36     void* ret=NULL;
 37     pthread_join(tid1,&ret);
 38     printf("pthread_id: %u,ret: %d\n",tid1,(int)ret);
 39     pthread_join(tid2,&ret);
 40     printf("pthread_id: %u,ret: %d\n",tid2,(int)ret);
 41     pthread_join(tid3,&ret);
 42     printf("pthread_id: %u,ret: %d\n",tid3,(int)ret);
 43     return 0;
 44 }

線程的基本操作

線程的分離:在任何一個時間點上, 線程是可結合的( joinable)或者是分離的( detached) 。一個可結合的線程能夠被其他線程收回其資源和殺死。在被其他線程回收之前,它的存儲器資源(例如棧)是不釋放的。 相反, 一個分離的線程是不能被其他線程回收或殺死的,它的存儲器資源在它終止時由系統自動動釋放。

 1 #include<pthread.h>
  2 #include<stdio.h>
  3 void* pthread_run(void* arg)
  4 {
  5     int count=5;
  6     while(count--)
  7     {
  8         printf("this is thread\n");
  9         sleep(1);
 10     }
 11 }
 12 int main()
 13 {
 14     pthread_t tid;
 15     pthread_create(&tid,NULL,pthread_run,NULL);
 16     void* ret=NULL;
 17     pthread_detach(tid);
 18     sleep(1);
 19     pthread_join(tid,&ret);
 20     printf("ret: %d,errstring:%s\n",(int)ret,strerror((int)ret));
 21 }

在設置分離后,依舊等待退出,會返回錯誤碼。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通榆县| 新乐市| 岳普湖县| 泰来县| 荆州市| 鄂尔多斯市| 盐城市| 朝阳县| 墨竹工卡县| 绥德县| 黄浦区| 海晏县| 福清市| 嵩明县| 马边| 新巴尔虎左旗| 伊宁县| 九龙城区| 长乐市| 昭通市| 湾仔区| 开化县| 邢台市| 金门县| 大连市| 尼勒克县| 滦平县| 化隆| 孝义市| 育儿| 石棉县| 民权县| 谷城县| 时尚| 福安市| 六枝特区| 利津县| 和政县| 安丘市| 湟源县| 扶余县|