一. 信号量
在进程间通信中有一种通信机制是信号量,它往往标识着一个临界资源的有无来控制不同的进程是否能访问到这个临界资源,它创建出来一般是一个信号量集的形式。
这里要提到的信号量,也是一个计数器,用来标识资源的个数,我们知道完成线程之间的互斥可以使用互斥锁,其实mutex也可以认为是一个计数器标识资源的可用数量,只是它的值非0即1,加锁时表示要使用资源,将mutex减1,释放锁表示有资源可用,将mutex的值还原为1。
而信号量和mutex类似,只是它标识资源的数量可以大于1,用来实现线程间的同步,即,如果信号量的值为1,则可以认为和互斥锁一样。下面要谈及的是POSIX semaphore库函数,这种信号量不仅可以用于同一进程的线程间同步,也可用于不同进程间同步。
-------------------------------------------------------------------------------------------
二. 信号量函数
信号量的创建及销毁
函数参数中,
sem是一个指向sem_t也就是信号量类型的一个指针;
pshared表示该信号量是否用于不同进程间同步,为0表示用于同一进程的线程间同步;
value表示要将该信号量初始化的值;
函数参数中,sem表示要销毁哪一个信号量;

本文介绍了信号量在进程间通信中的作用,特别是在生产者消费者模型中的应用。通过信号量,可以实现线程间的同步,例如在环形缓冲区场景中,生产者和消费者通过两个信号量分别控制缓冲区的空闲空间和数据数量。文中还探讨了单生产者单消费者和多生产者多消费者模型,并强调在多线程环境下,适当的位置添加互斥锁以防止数据竞争和死锁问题。


最低0.47元/天 解锁文章
1万+

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



