首页 > 其他分享 >多任务-线程

多任务-线程

时间:2024-12-27 19:58:04浏览次数:7  
标签:attr void 线程 pthread 进程 多任务 属性

线程:轻量级的进程,栈区独立(8M),与同一进程中的其他线程共用进程的堆区,数据区,文本区。

1. 线程的创建
   线程由所属的进程创建,进程为其分配独立的栈区空间,
   堆区,数据区,文本区与其他线程和所在进程共享。

2. 线程调度
   宏观并行, 微观串行 

3. 线程的消亡
    1. 线程退出
    2. 回收线程资源

进程和线程的区别:

定义:

   进程:正在执行的程序 ,是操作系统资源分配的最小单位

   线程:线程一定属于进程。与同一进程中的其他线程共用进程的堆区,数据区,文本区                           线程是cpu任务调度的最小单位。

资源消耗:

   进程:进程消耗的资源空间大 

   线程: 消耗的资源空间小,只需分配栈区

效率角度:创建线程比创建进程效率高,任务切换跨进程效率低于跨线程

安全角度:由于进程空间独立,所以安全性比线程高。

通信角度:进程间不能直接通信,需要使用进程间通信方式(IPC)实现
                  线程可以直接通信,比如:全局变量

1. 创建线程:

  int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
    功能:创建一个线程
    参数:
            thread: 保存线程ID的变量地址
            attr:线程属性  默认属性:NULL
            void *(*start_routine) (void *) : 线程任务处理函数
            arg:传递给任务处理函数的参数。

返回值:
     成功:0
     失败:非0

pthread_self()
  功能:获取当前线程的id号
 2. 线程退出及资源回收
   1. 退出
        1)在线程任务中调用return;
        2)在线程任务pthread_exit

     int pthread_join(pthread_t thread, void **retval);
     功能:
             阻塞回收线程的资源, 状态
      参数:
            thread:需要回收的线程ID
            retval:保存线程退出时的状态

                   比如:return 返回的内容地址
       成功:0

什么样的指针可以被函数返回(指针函数):

1. 不能是局部变量的空间地址
2. 能返回不被销毁的空间地址
     1. 全局变量
     2. 静态变量
     3. 堆区开辟的没被free的空间地址
     4. 字符串常量地址
     5. 通过参数传递过来的地址

线程非分离属性:能被pthread_join回收或者能被其他线程结束的线程,称为具有非分离属性的线程。

线程分离属性:不需要回收,或者执行结束会被系统回收的线程,称为分离属性的线程。

pthread_detach(pthread_t tid);

什么场景下设置分离属性:负责回收的进程(线程)无暇回收时。

如何设置:

1. 定义一个线程属性对象:pthread_attr_t
2. 初始化线程属性对象:pthread_attr_init();
3. 设置线程的分离属性:pthread_attr_setdetachstate();
4. 以分离属性创建线程:pthread_create();
5. 销毁属性对象:pthread_attr_destroy();

标签:attr,void,线程,pthread,进程,多任务,属性
From: https://blog.csdn.net/2401_89156690/article/details/144776061

相关文章

  • Java多线程处理文件详解与代码示例
    在Java编程中,文件处理是一项常见的任务。当需要处理大量文件或处理文件的时间较长时,单线程的处理方式可能会显得效率低下。为了提高文件处理的效率,我们可以使用多线程技术。本文将详细介绍如何使用Java多线程来处理文件,并提供一个详细的代码示例,该示例可以直接运行。一、多线......
  • 什么是线程同步?
    线程同步是指在多个线程并发执行时,保证它们按照一定的顺序执行以达到正确的结果。常用的线程同步机制有以下几种:互斥锁:使用互斥锁(Mutex)可以保证在同一时间只有一个线程可以访问共享资源。当一个线程获得了互斥锁后,其他线程需要等待该线程释放锁才能继续访问共享资源。信号量:信......
  • 什么是线程互斥?
    线程互斥(ThreadMutualExclusion)是一种同步机制,用于确保在多线程环境中,同一时间只有一个线程可以访问特定的资源或代码段。线程互斥的主要目的是防止多个线程同时修改共享数据,从而避免数据不一致和竞态条件(RaceConditions)。什么是竞态条件(RaceConditions)?竞态条件是指程序的输......
  • java 多线程处理list集合数据的实例应用
    众所周知创建线程的三种方式:继承Thread,重写run方法实现Runnable接口,重新run方法实现Callable接口,重写call方法下面使用Callable,来说一下为什么使用1.Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值。没有返回值这点稍微有点麻烦。不能声明抛出检查型异常则......
  • 多线程的实现原理
    多线程编程是一种允许在同一程序中同时执行多个线程的技术,以提高程序的性能和响应性。多线程的实现原理涉及操作系统、编程语言和编译器等多个层面。以下是对多线程实现原理的详细解释:多线程的基本概念线程(Thread):线程是程序执行的基本单元,是操作系统能够进行运算调度的最小单......
  • C#知识整理-多线程
    进程和线程进程是一种正在执行的程序。操作系统使用进程来分隔正在执行的应用程序。线程是操作系统向其分配处理器时间的基本单元。每个线程具有计划优先级并维护系统用于保存线程执行暂停时线程上下文的一组结构。线程上下文包含线程顺畅继续执行所需的全部信息,包括线程的一......
  • 基于Sentinel的服务保护方案的三种方式(请求限流、线程隔离、服务熔断)超详细讲解
    目录1、三种方式介绍1.1请求限流1.2线程隔离方案1.3服务熔断2、基于sentinel实现2.1启动sentinel2.2基于springboot整合sentinel2.2.1请求限流2.2.2请求隔离2.2.2.1 OpenFeign整合Sentinel2.2.3服务熔断2.2.3.1编写降级代码2.2.3.2服务熔断1、三种方......
  • 【JUC编程】JUC 多线程基础全面解析(速食版,25年后更新专栏)
    这篇文章就多个方面简单涉及一些内容,到2025年我会更新并发编程这个专栏。计划在过年之前更新完,都是从基础到工作中常用(以及可能涉及到)的知识点,有些内容这篇文章没有提及。希望大家可以多多支持、关注一下!文章目录JUC多线程基础全面解析一、线程与并发基础1.什么是......
  • Java多线程处理文件详解与代码示例
    在Java编程中,文件处理是一项常见的任务。当需要处理大量文件或处理文件的时间较长时,单线程的处理方式可能会显得效率低下。为了提高文件处理的效率,我们可以使用多线程技术。本文将详细介绍如何使用Java多线程来处理文件,并提供一个详细的代码示例,该示例可以直接运行。一、多线程处......
  • MySQL的MTS(多线程复制)和GC(组提交)
    开启MySQL的MTS(多线程复制)和GC(组提交)的主要参数如下:MTS(多线程复制)参数:slave_parallel_workers:设置从库上可以并行执行的线程数量。例如:slave_parallel_workers=8slave_parallel_type:设置从库并行复制的类型,有两个选项:DATABASE:基于库级别的并行复制。LOGICAL_CLOCK:基......