linux 線程函數小結

因爲主線程已經開始跑了,次線程還在使用串口打印須要一點時間,所以打印的都是重複的。函數

#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;
}

 

相關文章
相關標籤/搜索