功能:同步---->>相互配合完成一件事
POSIX 线程中同步:使用信号量实现,主要是二值信号量,当然信号量可以实现很多功能,不只是同步。
核心:有序
信号量:用来表示一类资源,它的值表示资源的个数,非负整数,等于0意味没资源可用,理解两个概念:
对资源访问(1为可访问,0为不能访问):
p操作(申请资源) [将资源的值 - 1]
....(执行代码)
V操作(释放资源) [将资源的值 + 1] //释放的是另外一个资源,交替使用,理解有序的概念
流程(以二值信号量为例):
1.定义信号量(全局变量或者堆上动态分配的内存)
sem_t sem;
@sem_t :是个结构体类型(vi -t 查看)
例:
sem_t read_sem;
sem_t write_sem; (全局变量)
2.初始化信号量
int sem_init(sem_t sem,int pshared,int value);
@pshared :0-->>进程间使用 ; 1-->>线程间使用
返回值:
成功返回0,失败返回-1;
例:
sem_init(&read_sem,0,0) ;
sem_init(&write_sem,0,1) ;
(注意:要判断返回值)
3.P操作、V操作(是结合在一起使用的)
int sem_wait(sem_t *sem);
例:
线程A的处理函数中: if(sem_wait(&read_sem) < 0) //read_sem初始为0,阻塞等待;
(注意:放置的位置,该怎么选择)
线程B的处理函数中: if(sem_wait(&write_sem) < 0) //write_sem初始为1.先执行
当线程B中先执行完代码后,read_sem进行V操作,sem_post(&read_sem) < 0),其实就相当于加1, 这样线程A就不阻塞了,可以执行;
阅读(2133) | 评论(0) | 转发(0) |