【操作系统原理】信号量的应用

相关文章

【操作系统原理】页面置换算法模拟

【操作系统原理】进程的管道通信

【操作系统原理】Linux多线程的创建和控制

【操作系统原理】进程调度模拟

【操作系统原理】进程创建与控制

原理

1、生产者--消费者问题:
2、信号量类型的声明:

Sem_t sem类型

3、信号量函数原型(初始化):

Sem_init(sem_t *sem,int pshared,unsigned int value):

①sem参数,为信号量地址

②pshared参数,值为0时,用于线程间同步,值为1时,用于进程间同步

③value参数,指定同时访问的线程数(初始值)

4、信号量操作函数(PV操作):

int sem_wait(sem_t *sem):调用一次,信号量sem进程减一。当为0时,再次进行减一,进行阻塞(P操作)

int sem_post(sem_t *sem):调用一次,信号量sem进程加一。当为N时,再次进行加一,进行阻塞(V操作)

所有这些函数在成功时都返回 0;错误保持信号量值没有更改,返回-1。

过程与结果(可贴图)

1、在main函数下创建两个线程,一个线程为生产者线程, 一个线程为消费者线程通过编程实现单缓冲区的生产者和消费者问题,通过观察实验结果分析信号量机制在同步与互斥中的实现原理。

采用同步机制使一个生产者线程,向单缓冲区数组写入数据,而另一个消费者线程,从数组中读取数据,通过两个信号量的P、V操作实现两线程的顺序先后,两者间为“先生产再消费”。

【操作系统原理】信号量的应用_第1张图片

【操作系统原理】信号量的应用_第2张图片

【操作系统原理】信号量的应用_第3张图片

图 代码及运行结果

2、在main函数下,创建4个线程,两个线程为生产者线程,两个线程为消费者线程,尝试实现两个生产者线程和两个消费者线程共享3个缓冲区的情况。

【操作系统原理】信号量的应用_第4张图片

【操作系统原理】信号量的应用_第5张图片【操作系统原理】信号量的应用_第6张图片

【操作系统原理】信号量的应用_第7张图片

图 代码及运行结果

这里创建了4个线程,其中2个线程为生产者线程,2个线程为消费者线程。生产者线程用于生成数据,消费者线程用于处理数据。生产者和消费者线程共享3个缓冲区。

你可能感兴趣的:(操作系统原理)