Linux | 线程同步--信号量、互斥锁和条件变量

本文介绍了Linux线程同步的三种机制:信号量、互斥锁和条件变量。信号量用于在线程间传递信号避免资源竞争;互斥锁保证关键代码段的独占访问,防止死锁;条件变量则提供线程间的通知机制,与互斥锁配合使用。此外,还讨论了线程库LinuxThreads和NPTL,并展示了如何封装这三种同步机制的类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、线程

线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。

Linux线程库:

Linux上两个最有名的线程库是 LinuxThreads 和NPTL。

用户可以使用如下命令来查看当前系统上所使用的的线程库

getconf GNU_LIBPTHREAD_VERSION

(我查了下自己的,发现我系统上使用的线程库是NPTL2.12 )

二、线程同步 

多线程程序要考虑同步问题。有问题当然就有解决的办法!!

下面我们讨论3种专门用于线程同步的机制:信号量、互斥量和条件变量。

1. 信号量

是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失。

常用的信号量函数是下面5个:

#include <semaphore.h>
//初始化一个未命名的信号量
int sem_init(sem_t *sem,int shared,unsigned int value); 

//销毁信号量,以释放其占用的内核资源
int sem_destroy(sem_t *sem); 

//以原子操作的方式将信号量的值 -1。如果信号量的值为0,则该函数阻塞,直到该信号量具有非0值。
int sem_wait(sem_t *sem); 

//与sem_wait函数类似,不过它始终立即返回,而不论被操作的信号量是否有非0值,相当于sem_wait的非阻塞版本 
int sem_trywait(sem_t *sem);  

//以原子操作的方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值