首页
学习
活动
专区
圈层
工具
发布

Linux系统编程-(pthread)线程的使用案例(分离属性、清理函数等)

这篇文章介绍Linux下线程的创建与基本使用案例,主要是案例代码为主;相关的函数详细介绍在上篇文章里已经介绍过了。 1. 案例代码: 线程的创建 下面这份代码演示如何创建线程。...如何接收子线程的返回值? 线程运行的时候默认是结合模式,也可以设置成分离模式,如果是默认的模式,在线程执行完毕后需要回收资源,顺便可以介绍子线程结束时,返回的状态值。...设置线程的分离属性 默认情况下,子线程是结合模式,需要手动等待子线程结束,清理空间;子线程也支持设置为分离属性,在子线程运行结束后,自己清理空间,下面的例子就演示如何设置子线程为分离模式。...设置线程的分离属性*/ pthread_detach(thread_id); while(1) { printf("主线程正在运行....设置线程的分离属性*/ pthread_detach(thread_id); sleep(3); //取消指定子线程结束 pthread_cancel(thread_id

1.3K10

【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )

文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性...线程的默认属性 : 线程创建后 , 默认是非分离线程 ; 2....非分离线程 与 分离线程 比较 : ① 设置非分离线程属性 : 先执行完线程内容 , 等待线程执行完毕后 , 才执行 pthread_join 后的代码 ; ② 设置分离线程属性 : pthread_join...; ③ 参数 2 ( int policy ) : 调度策略 ; VII 线程属性 3 ( 线程优先级设置 ) ---- 该功能在 Android , Linux 上可以使用 , 在 Visual...; /* 设置线程属性为 分离线程 如果没有设置分离线程时 , 先执行完线程内容 , 等待线程执行完毕后 , 才执行 pthread_join 后的代码 如果设置了分离线程属性

3.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】线程分离 | 线程库 | C++调用线程 | 线程局部存储

    线程分离 1. 为什么要线程分离?...,而是主线程继续向下执行,进入join, 然后新线程才把自己分离 join时没有分离,join后才进行分离,所以会正常执行程序 2....,对线程做管理,与LWP产生关联,包含库中的线程属性 即TCB 在库中通过自己定义的线程控制结构,把内核中的LWP控制起来 如何理解 先描述 在组织?...描述: struct pthread 描述的是线程的其他的一些属性 线程局部存储 (后面会详细讲) 线程独立的栈 整体红色的框 作为一个结构体 等同于 线程的TCB 结构 进行描述 创建一个线程就有一个红色框...---- 组织: 整体红色的框 作为一个结构体 把 每个结构体想象成数组, 可以聚合在一起 找线程,找红色框的起始地址即可 称为 线程ID pthread_t 就是一个地址数据,用来标识线程相关属性集合

    87530

    【Linux】详解线程控制之线程创建&线程终止&线程等待&线程分离

    attr:这是一个指向pthread_attr_t类型的指针,用于设置线程的属性,如栈大小、优先级等。如果这个参数为NULL,那么线程将使用默认的属性。...通常情况下,如果你不需要设置特殊的线程属性,可以传递NULL。 start_routine:这是一个函数指针,指向线程开始执行时要调用的函数。...e->getName() getResult() << endl; delete e; } return 0; } 五、线程分离...如果我们的主线程并不关心新线程的执行结果,我们可以将新线程设置为分离状态。所谓的分离只是进程的一种工作状态,在底层依旧数据共享,依旧属于同一个进程。...//detach可以放在main函数中也可以放在handler函数中 pthread_detach(tid); while(true) {} return 0; } 分离之后再主线程中就不需要再对子线程进行等待回收了

    1.3K00

    【linux学习指南】Linux线程创建&&终止&&等待&&分离与多线程创建

    Linux线程控制 POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的 要使用这些函数库,要通过引入头文 链接这些线程函数库时要使用编译器命令的...*(*start_routine) (void*), void *arg); 参数: thread:返回线程ID attr:设置线程的属性,attr为NULL表示使用默认属性start_routine...之前使用pthread_self得到的这个数实际上是一个地址,在虚拟地址空间上的一个地址,通过这个地址,可以找到关于这个线程的基本信息,包括线程ID,线程栈,寄存器等属性。...int pthread_detach(pthread_t thread); 可以是线程组内其他线程对⽬标线程进⾏分离,也可以是线程⾃⼰分离: pthread_detach(pthread_self())...; joinable和分离是冲突的,⼀个线程不能既是joinable⼜是分离的。

    89600

    Linux:多线程(一.Linux线程概念、线程控制——创建、等待、退出、分离,封装一下线程)

    在成功创建线程后,该指针将包含新线程的标识符。 pthread_t其实就是一个无符号长整型 attr:用于指定线程的属性。如果为 nullptr,则使用默认属性(一般都是用默认)。...2.5线程分离 线程默认都是joinable,需要等待的。...上述我们等待都是阻塞等待 其实也是有非堵塞等待的——不关注新线程的返回结果,只要求能完成相应的任务即可,我们可以把该线程设为分离状态:线程退出时自动释放资源 被分离的线程不能再join了,只是主线程不需要再等待了...POSIX 线程编程(也称为 Pthreads)中常用的函数,用于改变一个线程的属性,使得当该线程终止时,其相关的资源(如线程栈)能够被系统自动回收,而不需要其他线程显式地调用 pthread_join...分离的(detached):当线程被设置为分离状态时,一旦它终止,其资源就会被系统自动回收,而不需要其他线程调用 pthread_join。

    1.8K10

    pthread_create 线程属性-Linux学习——线程的创建和回收

    目录   一、线程的概念   特点   注意   Linux内核不提供线程,由线程库来实现。   ...二、线程的创建   #   int ( thread, const attr, void ()(void ), void arg);   成功返回0pthread_create 线程属性,失败时返回错误码...  thread 线程对象   attr 线程属性,NULL代表默认属性    线程执行的函数   arg 传递给的参数 ,参数是void * ,注意传递参数格式,   注意事项:1....线程创建需要时间,如果主进程马上退出,那线程不能得到执行   三、线程的结束   #   void (void *retval);   结束当前线程   retval可被其他线程通过获取   线程私有资源被释放...arg=%d\n",(int)*arg);   通过地址传递参数,注意类型的转换值传递,这时候编译器会告警pthread_create 线程属性,需要程序员自己保证数据长度正确 #if 1

    1.4K20

    Java多线程:线程属性

    # 线程属性 id: 线程唯一标识。自动生成。不允许修改。 name: 线程的名字,可以自定义成有具体含义的名字,便于识别不同作用的线程。(可同名) isDaemon: 是否是守护线程。...true=守护线程,false=用户线程。 当JVM中所有的线程都是守护线程,JVM将退出。 具有代表性的线程: main线程:用户线程,gc线程:守护线程。 子线程会默认继承父线程的这个属性。...必须在调用start()之前设置这个属性,线程运行中设置线程守护属性会抛出异常。 priority 线程优先级。 优先级高的线程概率上会优先运行。并不可靠....Java中的线程优先级有10个,默认是5,且子线程会继承父线程的优先级。...()); LOGGER.info("main线程是否是守护线程{}", mainThread.isDaemon()); LOGGER.info("子线程线程是否是守护线程

    1K20

    线程属性设置

    本文将通过一个创建n个线程的案例来展示一下线程属性的设定及使用,通常情况下,系统对于线程的创建是没有限制的,但是每一个线程都是需要一个栈空间的,每个栈空间大小也都是固定的,可通过系统命令 ulimit...我们只是做一个小的测试,调整每个线程的栈空间大小来揭露线程属性的使用方法,并提高一个程序创建线程的数量(Notice:提高线程数量并没有什么好处,我们只是为了演示如何修改线程属性)。...可以看出,我们的程序已经快将虚拟内存用户空间使用完了,所以程序再次分配线程失败了。 ---- 而如果我们将每一个线程的栈大小设定的更小了(线程属性设置),是不是就可以提高创建线程的数量呢?...pthread_attr_t attr; pthread_attr_init(&attr); // 设定线程属性为分离属性 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED...至此我们验证了线程数量的创建取决于栈大小并且学会了如何设定一个线程的属性。

    80020

    嵌入式Linux:线程的创建、终止、回收、取消和分离

    1、创建线程 在 Linux 中,默认情况下,一个进程启动时是单线程运行的,这个线程被称为 主线程。...attr:这是一个指向 pthread_attr_t 类型的指针,用于设置线程的属性。如果设置为 NULL,则使用线程的默认属性。这些属性包括线程是否分离(detached)、栈大小等。...如果需要更改线程的属性,比如将其设置为 分离线程 或指定线程的栈大小,可以通过 pthread_attr_t 来设置。...2、终止线程 在 Linux 中,终止线程可以通过多种方式完成,不同的方式影响线程的退出行为和进程的状态管理。 我们详细说明几种终止线程的常用方法。...在 Linux 中,回收线程的操作与进程的回收类似。

    1K10

    【Linux】盘点<多线程控制>基本操作&演示:创建&中止&等待&分离

    前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎!...对于Linux目前实现的NPTL实现而言,pthread_t类型的线程ID,本质 就是一个进程地址空间上的一个地址。...*attr, void *(*start_routine)(void*), void *arg); 参数 thread:返回线程ID attr:设置线程的属性,attr为NULL表示使用默认属性...:pthread_detach 【1】为什么要进行线程分离&线程joinable状态与分离状态 默认情况下,新创建的线程是 joinable 的,线程退出后,需要对其进行pthread_join操作,...又是分离的 【2】基本语法 -- 线程组内其他线程对目标线程进行分离 int pthread_detach(pthread_t thread); -- 线程内自己分离 pthread_detach(pthread_self

    44710

    linux网络编程之posix 线程(二):线程的属性和 线程特定数据 Thread-specific Data

    一、posix 线程属性 POSIX 线程库定义了线程属性对象 pthread_attr_t ,它封装了线程的创建者可以访问和修改的线程属性。主要包括如下属性: 1. 作用域(scope) 2. ...分离的状态(detached state) 6. 调度策略和参数(scheduling policy and parameters)  线程属性对象可以与一个线程或多个线程相关联。...分离线程是指不需要和进程中其他线程同步的线程。也就是说,没有线程会等待分离 线程退出系统。因此,一旦该线程退出,它的资源(如线程 ID)可以立即被重用。 线程的布局嵌入在进程的布局中。...) detachstate detachstate 属性控制一个线程是否 是可分离的 int pthread_attr_setguardsize (pthread_attr_t* attr ,size_t...在 Linux 系统中,进程有三种调度策略:SCHED_FIFO、SCHED_RR 和 SCHED_OTHER,线程也不例外,也具有这三种策略。

    1.3K00

    多线程(二) ~ 线程核心属性与状态

    线程的关键属性 (一)线程名称 线程名字,我们可以通过setName方法来设置线程的名字,方便后期调试 通过getName方法可以获取线程名称 (二)线程是否为后台线程 1....前台线程 当前台线程还在运行时,即使其他所有线程都运行完,进程也不停止,要等待前台线程结束,进程才结束 2....后台线程 当所有前台线程运行完毕时,即使后台线程还有任务没有完成,也会终止进程 3....查看是否是后台线程(isDaemon) 是否是后台线程通过isDeamon方法来查看 Java中线程创建时默认是前台线程 4....线程1调用join,线程1就是被等待的线程,要等到线程1结束后才能结束进程 3. join可以设置等待时间,在设定的等待时间结束后,不论线程1是否完成任务,都不再等待,结束进程 4. join会抛出一个

    14010

    为什么建议 Netty 的 IO 线程与业务线程分离

    问题背景: 某互联网同学咨询一个Netty使用问题:最近在研究公司内部的RPC框架,发现底层通信框架使用的是Netty,而且Netty的I/O线程与处理业务的线程分离。...1、如果业务线程处理比较慢,即便I/O线程处理再快,业务端到端响应还是不会缩短 2、I/O线程到业务线程存在线程上下文切换,增加了额外的开销 想法: 构造一个线程数较大(例如1024)的NioEventLoopGroup...---- 问题答复 Netty I/O线程和业务处理线程分离原因: 1、充分利用多核的并行处理能力:I/O线程和业务线程分离,双方可以并行的处理网络I/O和业务逻辑,充分利用多核的并行计算能力,提升性能...3、可维护性:I/O线程和业务线程分离之后,双方职责单一,有利于代码维护和问题定位。...建议采用N组线程池,每个线程池线程数尽量少的方式增加并行处理能力, 减少锁争用。 ? 2)故障隔离问题:如果后端只有一个线程池,某个服务故障将会导致整个进程不可用。

    4K20

    pthread_attr_init线程属性

    线程属性结构如下: typedef struct { int detachstate; 线程的分离状态...二、线程的分离状态 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有的线程等待创建的线程结束。...程序员应该根据自己的需要,选择适当的分离状态。所以如果我们在创建线程时就知道不需要了解线程的终止状态,则可以pthread_attr_t结构中的detachstate线程属性,让线程以分离状态启动。...Detachstate 线程的分离状态属性 返回值: 若成功返回0,若失败返回-1。...可以使用pthread_attr_setdetachstate函数把线程属性detachstate设置为下面的两个合法值之一:设置为PTHREAD_CREATE_DETACHED,以分离状态启动线程;或者设置为

    2.1K30

    【Linux】多线程——线程概念|Linux下进程与线程|线程控制

    所以Linux中,没有给Linux"线程"去专门设计对应的数据结构!而是直接复用PCB!用PCB来表示Linux内部的“线程”!...ID,该参数是一个输出型参数 attr:用于设置创建线程的属性,传入nullptr表示默认,这个属性基本不管 start_routine:函数地址,表示线程启动后要执行的函数 arg:传给线程例程的参数...5.分离线程——pthread_detach 线程是可以等待的,等待的时候,是join的等待的,阻塞式等待。而如果线程我们不想等待:不要等待,该去进行分离线程处理。...,而主线程直接去等待了,也就是新线程还没来得及分离自己,也就是分离的太慢了,最后主线程直接去等待了。...也可以直接让主线程直接pthread_detach,而不是让新线程分离:线程运行起来就直接分离了,分离成功之后就去join,此时的新线程就不去等待了,后续工作无需继续

    1.7K30

    【Linux】线程

    线程(Thread) 1. 什么是线程? 线程是进程中的一个执行单元,它是 CPU 调度的基本单位。线程依赖于进程存在,一个进程可以包含多个线程,这些线程可以并发执行,提高程序的运行效率。...进程是承担系统分配系统资源的实体 线程是操作系统调度的基本单位 用一张图简要说明一下什么是线程: 首先我们要知道,在Linux中是没有实际的线程的,线程是被模拟出来的,Linux实际上使用LWP...LWP(Light Weight Process,轻量级进程)是 Linux 线程实现的一种机制,它与传统进程共享大部分资源,但仍有自己的调度信息。...创建线程 pthread_create是用于创建线程的函数,这个函数不是系统调用,因为Linux实际上是没有实体的线程,这个创建线程的函数是在pthread.h中封装的函数。...这个函数的第一个参数是pthread_t*类型的,pthread_t表示线程id,第二个参数表示线程属性,要是我们不观星的话,就直接传递nullptr,第三个参数是线程执行函数,就是函数指针,新线程就是从这个函数的入口开始执行的

    1.1K00

    Linux多线程【线程池】

    ✨个人主页: 北 海 所属专栏: Linux学习之旅 操作环境: CentOS 7.6 腾讯云远程服务器 前言 线程池是一种管理线程的机制,它可以在需要时自动创建和销毁线程,以及分配和回收线程资源...总之多线程算是正式结束了,下一篇将会打开网络的大门 相关文章推荐 Linux多线程 =====:> 【初始多线程】、【线程控制】、【线程互斥与同步】、【生产者消费者模型】 Linux...进程信号 ===== :> 【信号产生】、【信号保存】、【信号处理】 Linux进程间通信 ===== :> 【消息队列、信号量】、【共享内存】、【命名管道】、【匿名管道】 Linux基础IO...】、【创建、终止、等待】 Linux进程学习 ===== :> 【进程地址】、【环境变量】、【进程状态】、【基本认知】 Linux基础 ===== :> 【gdb】、【git】、【gcc/g++...】、【vim】、Linux 权限理解和学习、听说Linux基础指令很多?

    1.9K40
    领券