代码实现的内容 :生产者创建一个新的节点,之后将产生的随机数赋放在新节点的数据域(新节点将作为头节点)。 消费者将生产者创建的新节点(头节点)删除,(链表的第二节点将作为头节点)并释放空间。
在C语言中,信号量(Semaphore)是一种用于处理并发控制的同步机制。它通常用于线程之间的互斥访问和同步操作。
使用信号量可以实现线程的并行操作,但并不是默认情况下就会并行执行。信号量的主要作用是控制线程的访问权限和同步操作,以防止出现竞争条件和资源争夺。
通过对信号量的操作,线程可以进行如下操作:
1. 等待信号量(wait):如果信号量的计数器大于零,则将计数器减一,并继续执行线程。如果计数器等于零,则线程被阻塞,直到有其他线程释放信号量。
2. 发送信号量(signal):将信号量的计数器加一,使得被阻塞的线程可以继续执行。
通过合理地使用信号量,可以实现线程之间的并行操作和同步。
需要注意的是,并行执行的效果取决于系统的硬件和操作系统的支持,以及程序的设计和实现方式。有时,线程可能会因为系统限制或者其他原因,无法真正并行执行。因此,在编写并行程序时,需要考虑这些因素,并确保正确地使用信号量来实现并发控制。
不管是生产者还是消费者使用一次信号量计数器就得减一,计数器等于零的时候就会阻塞直到其它线程释放信号量,(解锁sem_post(sem_t *sem)就是释放信号量,参数是谁就给谁释放信号量,sem_wait(sem_t *sem)就是加锁函数(拿信号量函数),等于零的时候阻塞
例如:生产者使用信号量,创建完节点并赋值之后,就得给消费者释放信号量,消费者拿到信号量之后就停止阻塞开始执行线程,当消费者执行完成(删除头节点)后就得给生产者释放信号量,生产者拿到信号量之后就继续生产 依次不断循环)