一、线程
线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。
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);
//以原子操作的方