学习记录第二十六天

pthread_cancel函数

        用于请求取消一个线程。当一个线程收到取消请求后,它不会立即停止执行,而是会在下一个取消点处结束执行。取消点是程序中特定的位置,在这些位置上,线程会响应取消请求。如果线程正在执行一个不可中断的系统调用,它将继续执行直到该调用完成。
pthread_cancel函数的原型如下

int pthread_cancel(pthread_t thread);

其中thread是要取消的线程的标识符。如果函数调用成功,返回0;如果失败,返回一个错误码。

pthread_detach函数

        用于将一个线程设置为分离状态(detached state)。在分离状态下,线程在执行完毕后,其占用的资源(如堆栈)会自动被操作系统回收,无需显式调用pthread_join函数来等待线程结束。这对于那些不需要与其创建它的线程共享退出状态或资源的线程来说非常有用。如果一个线程在结束时还没有被分离,它将处于一个僵尸状态,直到另一个线程调用pthread_join来回收其资源。
使用pthread_detach函数的典型场景包括创建大量短暂的工作线程,这些线程完成任务后不再需要与其他线程交互。通过将这些线程设置为分离状态,可以减少对资源的管理开销,并允许它们独立于创建它们的线程结束。
pthread_detach函数的原型如下

int pthread_detach(pthread_t thread);

其中thread是要设置为分离状态的线程的标识符。如果函数调用成功,返回0;如果失败,返回一个错误码。

线程的优缺点

优点
  1.资源利用率高:线程共享进程的资源,减少了资源的复制和管理开销。
  2.上下文切换开销小:线程之间切换只涉及少量的上下文数据,如寄存器和程序计数器。
  3.通信效率高:由于共享内存空间,线程间通信通常比进程间通信更快。
  4.可充分利用多核处理器:线程可以并行执行,提高计算密集型任务的性能。
缺点
  1.线程安全问题:共享资源可能导致同步问题,需要额外的同步机制来保证数据一致性。
  2.健壮性降低:一个线程的错误可能影响整个进程,增加了程序出错的风险。
  3.编程难度提高:多线程编程需要考虑更多的并发控制和同步问题。

进程的优缺点

优点
  1.稳定性和安全性:进程之间相互隔离,一个进程的崩溃不会影响其他进程。
  2.资源隔离:进程拥有独立的地址空间和资源,减少了资源冲突的可能性。
  3.适用于多核处理器:进程可以并行计算,充分利用多核处理器的能力。
缺点
  1.资源消耗大:进程创建、销毁和切换的开销较大,资源消耗多。
  2.通信复杂:进程间通信需要通过复杂的IPC机制,效率相对较低。
  3.进程数受限:进程的数量受到系统资源的限制,可能无法充分发挥多核处理器的并行处理能力。

互斥锁的概念

        互斥锁(Mutex)是一种同步机制,用于在多线程环境中共享资源时防止多个线程同时访问同一资源,从而避免数据竞争和资源损坏。互斥锁可以确保在任何时刻只有一个线程能够进入临界区(即共享资源的访问区域)。
互斥锁的工作原理
当一个线程尝试进入临界区时,它必须先尝试获取互斥锁。如果锁已被其他线程持有,则请求锁的线程会被阻塞,直到锁被释放。一旦锁被释放,请求锁的线程将获得锁,并进入临界区。在离开临界区之前,持有锁的线程必须释放锁,以便其他线程有机会进入。

互斥锁相关函数

互斥锁的相关函数包括:
  1.pthread_mutex_init:初始化互斥锁。
  2.pthread_mutex_destroy:销毁互斥锁。
  3.pthread_mutex_lock:请求锁定互斥锁。
  4.pthread_mutex_unlock:释放互斥锁。
  5.pthread_mutex_trylock:尝试锁定互斥锁,不成功则立即返回而不阻塞。
这些函数允许开发者创建、初始化、锁定、解锁和销毁互斥锁,以实现线程同步。

函数原型

初始化互斥锁

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);

此函数用于初始化互斥锁,mutex 是指向互斥锁变量的指针,attr 是指向互斥锁属性的指针,如果为 NULL,则使用默认属性。

销毁互斥锁

int pthread_mutex_destroy(pthread_mutex_t *mutex);

此函数用于销毁互斥锁,释放与其关联的资源。

锁定互斥锁

int pthread_mutex_lock(pthread_mutex_t *mutex);

此函数用于请求锁定互斥锁。如果互斥锁已被其他线程持有,则调用线程会被阻塞,直到互斥锁可用。

解锁互斥锁

int pthread_mutex_unlock(pthread_mutex_t *mutex);

此函数用于释放互斥锁,允许其他等待该锁的线程继续执行。

尝试锁定互斥锁

int pthread_mutex_trylock(pthread_mutex_t *mutex);

此函数尝试锁定互斥锁,如果互斥锁不可用,则函数立即返回而不是等待。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值