首页 > 系统相关 >Linux线程

Linux线程

时间:2024-08-15 19:27:13浏览次数:14  
标签:attr thread void Linux mutex pthread 线程

一、线程的基本操作

  1. pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) :此函数用于创建新线程。thread 用于存储新创建线程的标识符,attr 可指定线程属性,start_routine 是线程执行的函数指针,arg 为传递给线程执行函数的参数。
  2. pthread_exit(void *retval) :线程通过此函数主动退出,retval 可携带退出状态或结果。
  3. pthread_cancel(pthread_t thread) :用于向指定的 thread 发送取消请求。

二、线程的资源回收

  1. pthread_join(pthread_t thread, void **retval) :适用于子线程执行任务较短,且主线程需要获取子线程的结束状态或结果。若子线程顺利结束,retval 可获取返回值。
  2. pthread_detach(pthread_t thread) :适用于子线程执行时间较长,主线程无需关心其状态,子线程结束后资源自动释放。                                                                                         功能: 分离线程      参数: thread 要分离的线程的tid     返回值: 成功 0    失败 错误码

三、线程与进程的对比

  1. 本质区别:线程是 CPU 执行的最小单位,进程是资源分配和任务调度的基本单位。
    • 线程创建和调度速度快,能实现更高的并发程度。
  2. 特点对比:
    • 线程:
      • 优点:共享进程的数据空间,方便共享数据。
      • 缺点:安全性较差,易导致资源竞争。
    • 进程:
      • 优点:各进程空间相互独立,安全性好。
      • 缺点:进程间共享数据较为复杂。

四、线程间的资源竞争

  1. 概念:线程间存在共享资源,其中的临界资源访问需谨慎处理。
  2. 临界区:即访问共享资源(临界资源)的那段代码。
  3. 解决方案 - 互斥锁:
    • 定义:pthread_mutex_t mutex;
    • 初始化:pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) ,attr 通常设为 NULL 以使用默认属性。
    • 加锁:pthread_mutex_lock(pthread_mutex_t *mutex) ,确保线程排他性地访问临界资源。
    • 解锁:pthread_mutex_unlock(pthread_mutex_t *mutex) ,在访问结束后释放锁。
    • 销毁:pthread_mutex_destroy(pthread_mutex_t *mutex) ,资源不再使用时进行销毁。

五、线程间的顺序问题

使用信号量来解决线程间的顺序问题,它类似于交通信号灯,可控制线程有序访问临界资源。     信号量 --- 可以顺序操作的一把锁

标签:attr,thread,void,Linux,mutex,pthread,线程
From: https://blog.csdn.net/lijiaweixx/article/details/141229788

相关文章

  • Linux iostat命令基本使用
    目录iostat命令介绍iostat命令帮助iostat帮助信息iostat的选项解释iostat命令基本使用查看iostat工具版本直接使用iostat命令每次间隔5秒,查看3次信息只查看磁盘状态以k或M为单位显示信息显示磁盘I/O详细情况查看cpu状态信息iostat命令的使用总结磁盘模块分析CPU模块分析iostat命......
  • miniomp.dll丢失全方位指南:解锁多线程应用程序的高效修复策略
    解决miniomp.dll丢失的问题,可以遵循以下专业步骤来确保多线程应用程序正常运行:1.手动下载miniomp.dll:•首先,从可信赖的DLL下载站点或软件供应商处找到适合您操作系统的miniomp.dll文件。请务必谨慎选择来源,以避免潜在的安全风险。2.放置DLL文件至正确路径:•将下载......
  • Kali Linux 三种网络攻击方法总结(DDoS、CC 和 ARP 欺骗)
    一、引言在当今数字化的时代,网络安全成为了至关重要的议题。了解网络攻击的方法和原理不仅有助于我们增强防范意识,更是网络安全领域专业人员必备的知识。KaliLinux作为一款专为网络安全专业人员和爱好者设计的操作系统,提供了丰富的工具来模拟和研究各种网络攻击手段。本文......
  • Linux expect命令
    Linuxexpect命令​ 在Linux系统中,expect是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。expect自动交互流程:​ spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.使用场景自动化登录和操作远程服务器通......
  • Linux下的gdb日常使用
    100个GDB小技巧0.常用0.1获取源代码行与程序地址之间的对应关系(1)显示当前执行指令所在的源代码行:infoline(2)显示特定函数或源代码行的地址信息:infoline<function-name>|<source-file>:<line-number>例如,要查看函数myFunction的起始地址,可以使用:infolinemy......
  • 线程池使用场景 调用多个微服务汇总数据
    importlombok.SneakyThrows;importjava.text.SimpleDateFormat;importjava.util.concurrent.*;publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){shopping_threadPool();}/*汇总数据使用线程池+Future耗时≈所有......
  • Linux 软件管理
    YUM仓库配置        默认的系统YUM源,需要连接国外的apache网站,网速比较慢,可以修改关联的网络YUM源为国内镜像的网站,比如网易,aliyu等替换yum源yuminstallwget 1.在/etc/yum.repos.d/目录下,备份repos文件cpCentOS-Base.repoCentOs-Base.repo.backup2.下......
  • 最完整版Linux安装mysql8.0(保姆教程)
    目录前言删除已安装的mysql通过yum源安装mysql前言安装mysql可以通过yum源和压缩包两种方式安装,压缩包安装的mysql通常使用的是旧的SysVinit脚本,使用命令如:servicemysqlstart。如果想要交给服务器的任务管理器管理需要进行额外配置,配置中可能会出现一些问题,推荐使......
  • 线程池 种类
    fixedsinglecachedimportjava.util.concurrent.*;publicclassT{publicstaticvoidmain(String[]args){ExecutorServicethreadPool=getFixedThreadPool();for(inti=0;i<8;i++){threadPool.submit(newMyTask......
  • linux 同时tail 多个文件并过滤多个关键字
    多个文件  过滤多个关键字或的关系tail-fcdc-adapter/err_cdc-adapter.logcdc-admin/err_cdc-adapter.logcdc-dpm/err_cdc-dpm.logcdc-extractor/err_cdc-extractor.log|grep-E'.log|ERROR'==>cdc-adapter/err_cdc-adapter.log<==[2024-08-1514:59:25.905......