linux 线程函数小结

Posted jack-hzm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ;

2 线程不是先创建的先执行,是根据内核来决定的先执行那个。

3 可以在创建线程的时候增加延时,让每个线程依次执行,这样子大的log就是顺序执行的。

技术图片

 

  看某个进程的资源

top -p 4081 

 

 

线程回收,pthread_join ; 只调用pthread_exit 是不行的,只是退出线程,但是大小是没有变化的。

 pthread_join 是阻塞函数,因此可以将线程改为pthread_detach 改为detach属性,结束后自动释放资源的。

20s之后线程的资源变小

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

 

技术图片

 

以上是关于linux 线程函数小结的主要内容,如果未能解决你的问题,请参考以下文章

linux应用开发小结

JUC手写多线程的题目小结

JUC手写多线程的题目小结

多线程之block小结

JS小结之事件循环

线程池知识小结