Linux线程

一、线程的基本操作

  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) ,资源不再使用时进行销毁。

五、线程间的顺序问题

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

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值