因爲主線程已經開始跑了,次線程還在使用串口打印須要一點時間,所以打印的都是重複的。函數
#include "pthread.h" #include "stdio.h" #include "stdlib.h" static void * thread_function(void * arg ) { // printf("%s %d\n ",__FUNCTION__ , (int)arg ); printf("%s %d\n ",__FUNCTION__ , *(int*)arg ); while(1); return NULL; } int main(int argc, const char *argv[]) { pthread_t tid[10]; int i; for(i = 0; i<10 ; i++) { //pthread_create(&tid[i] ,NULL, thread_function ,(void *) i );傳送值的方法 pthread_create(&tid[i] ,NULL, thread_function ,(void *) &i ); 傳送地址的方法 } while(1) { //printf("%s\n",__FUNCTION__); //sleep(1); } return 0; }
1 查看線程的指令ps -eLf | grep thread ;ui
2 線程不是先建立的先執行,是根據內核來決定的先執行那個。spa
3 能夠在建立線程的時候增長延時,讓每一個線程依次執行,這樣子大的log就是順序執行的。線程
看某個進程的資源code
top -p 4081 blog
線程回收,pthread_join ; 只調用pthread_exit 是不行的,只是退出線程,可是大小是沒有變化的。進程
pthread_join 是阻塞函數,所以能夠將線程改成pthread_detach 改成detach屬性,結束後自動釋放資源的。資源
20s以後線程的資源變小it
#include "pthread.h" #include "stdio.h" #include "stdlib.h" static void * thread_function(void * arg ) { printf("%s %d\n ",__FUNCTION__ , (int)arg ); //printf("%s %d\n ",__FUNCTION__ , *(int*)arg ); sleep(20); pthread_exit("I quit\n"); while(1); return NULL; } int main(int argc, const char *argv[]) { pthread_t tid[10]; int i; for(i = 0; i<10 ; i++) { pthread_create(&tid[i] ,NULL, thread_function ,(void *) i ); pthread_detach(tid[i]); //pthread_create(&tid[i] ,NULL, thread_function ,(void *) &i ); //sleep(1); }
// pthread_join 是阻塞函數,所以能夠將線程改成pthread_detach 改成detach屬性,
pthread_exit結束後自動釋放資源的。
/* int errno ;
for(i = 0; i<10 ; i++)
{
errno = pthread_join(tid[i] ,NULL);
if(errno == -1 )
{
perror("pthread_exit"); return -1 ;
}
} */
while(1)
{ //printf("%s\n",__FUNCTION__); //sleep(1);
}
return 0;
}