一、线程
线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。
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);
//以原子操作的方
Linux线程同步:信号量、互斥锁与条件变量详解

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

被折叠的 条评论
为什么被折叠?



