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

原文地址:https://www.cnblogs.com/jack-hzm/p/11372276.html

时间: 2024-10-14 23:35:34

linux 线程函数小结的相关文章

linux 线程函数大全

Technorati 标签: Linux thread 索引: 1.创建线程pthread_create 2.等待线程结束pthread_join 3.分离线程pthread_detach 4.创建线程键pthread_key_create 5.删除线程键pthread_key_delete 6.设置线程数据pthread_setspecific 7.获取线程数据pthread_getspecific 8.获取线程标示符pthread_self 9.比较线程pthread_equal 10.一次

[笔记]linux下和windows下的 创建线程函数

linux下和windows下的 创建线程函数 1 #ifdef __GNUC__ 2 //Linux 3 #include <pthread.h> 4 #define CreateThreadEx(tid,threadFun,args) pthread_create(tid, 0, threadFun, args) 5 #define CloseHandle(ph) 6 7 int pthread_create( 8 //指向线程标识符的指针. 9 pthread_t *restrict t

Linux下gcc编译控制动态库导出函数小结

Linux下gcc编译控制动态库导出函数小结 来源 https://www.cnblogs.com/lidabo/p/5703890.html 根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden"))) 就是说将不公开的函数都加上这个属性,没加的就是可见的 2. gcc 在链接时设置 -fvisibility=hidden,则不加 v

Linux线程基础函数

1. 线程标识: (1) 比较两个线程ID: #include <pthread.h> int pthread_equal(pthread_t tid1, pthread_t tid2); ret-若相等则返回非0值,否则返回0值 (2) 获取线程自身ID: #include <pthread.h> pthread_t pthread_self(void); ret-调用线程的线程ID 2. 线程的创建: #include <pthread.h> int pthread

Linux多线程编程小结

 Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序设计第3版>. 1.Linux进程与线程 Linux进程创建一个新线程时,线程将拥有自己的栈(由于线程有自己的局部变量),但与它的创建者共享全局变量.文件描写叙述符.信号句柄和当前文件夹状态. Linux通过fork创建子进程与创建线程之间是有差别的:fork创建出该进程的一份拷贝,这个新进程拥有自己的

[转载]Linux 线程实现机制分析

本文转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 支持原创.尊重原创,分享知识! 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的. 一.基础知识:线程和进程 按照教科书上的定义,进

Linux 线程与进程,以及通信

http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-id-3025213.html 1.首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.进程是程序在某个数据集上的执行,

linux线程--基本应用

有感而发(可以直接忽略~):每次要用到线程,都要在网上重新学下基础,例子倒是不少:一种是排版好,讲的不全又不是自己想要的:一种是排版不好,直接略过了.两者兼有的又要苦苦寻找,所以还是自己总结了,觉得每个程序员都得了一种看别人不顺眼的病,哈哈.希望大家批评指正,我这个排版和总结有什么可优化的,绝对尽力而为. 本文主要介绍linux下线程的基本应用,列举了几个常用函数的用法及实例. 头文件 pthread.h 编译选项需要加 -pthread 常用函数 线程创建函数原型: 1 int pthread

Linux 线程(进程)数限制分析

1.问题来源 公司线上环境出现MQ不能接受消息的异常,运维和开发人员临时切换另一台服务器的MQ后恢复.同时运维人员反馈在出现问题的服务器上很多基本的命令都不能运行,出现如下错误: 2.   初步原因分析和解决 让运维的兄弟在服务上查看内存.CPU.网络.IO等基本信息都正常.于是自己到运维的服务器上看了一下,下面是slabtop –s c的运行结果,问题初步原因貌似出现了: 如果看到这个截图你看不出什么异常的话,下面的内容你可能不感兴趣,哈哈... task_struct是内核对进程的管理单位,