線程測試
1.線程自動分離,經常使用方法:spa
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <pthread.h> 4 5 pthread_mutex_t mutex; // 讓咱們先定義一把 」鎖「 ! 6 7 8 void* fun(void* arg){ 9 10 pthread_mutex_lock(&mutex); // 上鎖:進行互斥,資源保護 11 printf("fun : child 1 !\n"); 12 sleep(1); 13 printf("fun : child 2 !\n"); 14 sleep(1); 15 printf("fun : child 3 !\n"); 16 sleep(1); 17 pthread_mutex_unlock(&mutex); // 解鎖:釋放 18 19 pthread_exit(NULL); // 結束當先線程 20 21 } 22 23 24 int main(void) 25 { 26 27 pthread_mutex_init(&mutex, NULL); // 初始互斥鎖 28 29 pthread_t tid; // 線程 id 30 31 if( pthread_create(&tid, NULL, fun, NULL) !=0 ){ // 建立線程 32 perror("pthread_creat failed"); 33 exit(1); 34 } 35 36 pthread_detach(tid); // 直接分離,自動收屍 37 38 39 pthread_mutex_lock(&mutex); // 上鎖:進行互斥,資源保護 40 printf("main : parent 1 !\n"); 41 sleep(1); 42 printf("main : parent 2 !\n"); 43 sleep(1); 44 printf("main : parent 3 !\n"); 45 sleep(1); 46 pthread_mutex_unlock(&mutex); // 解鎖:釋放 47 48 sleep(5);// 睡眠五秒,否則主進程結束,子線程就jj了,沒現象了!! 49 printf("資源互斥,上鎖成功 !\n"); 50 return 0 ; 51 }
2.線程手動分離,用來了解:線程
1 void* fun(void* arg){ 2 printf("fun : child !\n"); 3 sleep(1); 4 printf("fun : child !\n"); 5 sleep(1); 6 7 printf("先結束線程,再進行收屍\n"); 8 pthread_exit(NULL); // 結束當先線程 9 10 } 11 12 13 int main(void) 14 { 15 pthread_t tid; // 線程 id 16 17 if( pthread_create(&tid, NULL, fun, NULL) !=0 ){ // 建立線程 18 perror("pthread_creat failed"); 19 exit(1); 20 } 21 22 printf("main : parent !\n"); 23 sleep(10); 24 // printf("main : parent !\n"); 25 // sleep(1); 26 27 28 if( pthread_join(tid, NULL) !=0 ){ // 給子線程收屍 ! 29 perror("pthread_join failed"); // 第二個參數爲子線程的返回值,自定義! 30 exit(1); 31 } 32 printf("收屍成功\n"); 33 34 35 return 0 ; 36 }
測試:code
success !blog
<筆記>進程
1. 資源