其實只在前一篇文章的基礎上改了少許代碼
[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的順序),創建多個線程成功~