程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 多線程(一):生成多個線程

多線程(一):生成多個線程

編輯:C++入門知識

其實只在前一篇文章的基礎上改了少許代碼


[cpp]  #include <stdio.h>  
#include <pthread.h>  
#define THREADNUM 3  
 
void thread(int i) { 
    printf("This is thread:%d\n", i); 
    pthread_exit(NULL); 

 
int main(void) { 
    pthread_t id[THREADNUM]; 
    int ret, i; 
 
    for(i=0; i<THREADNUM; i++) { 
        ret = pthread_create(&id[i], NULL, (void *)thread, i); 
        if(ret != 0) { 
            printf("Create thread error!\n"); 
            exit(1); 
        } 
    } 
    for(i=0; i<THREADNUM; i++) { 
        pthread_join(id[i], NULL); 
    } 
    printf("This is the main process.\n"); 
     
    return 0; 

#include <stdio.h>
#include <pthread.h>
#define THREADNUM 3

void thread(int i) {
 printf("This is thread:%d\n", i);
 pthread_exit(NULL);
}

int main(void) {
 pthread_t id[THREADNUM];
 int ret, i;

 for(i=0; i<THREADNUM; i++) {
  ret = pthread_create(&id[i], NULL, (void *)thread, i);
  if(ret != 0) {
   printf("Create thread error!\n");
   exit(1);
  }
 }
 for(i=0; i<THREADNUM; i++) {
  pthread_join(id[i], NULL);
 }
 printf("This is the main process.\n");
 
 return 0;
}
這次的代碼給thread函數傳遞了一個參數,而這個參數是通過pthread_create函數的第四個參數傳過去的。

順便提一句,pthread_create中的第三個參數,使用(void *)thread或者是(void *)&thread都對。(可能只是暫時都對,這個問題先放一邊)

需要注意的是,pthread_join要另外寫一個for循環,如果把這個函數與第一個for循環放到一起的話,從速度或是什麼其他角度看上去,感覺不能算是多線程,三個線程還是順序執行的。

執行此代碼,會發現打印出的三個線程的順序是隨機的(不一定是0 1 2的順序),創建多個線程成功~

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved