信号量(下)实验

简介: 信号量(下)实验

实验1:司机和售票员问题

 

#include 
#include 
#include 
#include 
sem_t d;
sem_t c;
void* Driver(void* arg)
{ sem wait(&d);
printf("开车\n");
printf("正常行车\n");
printf("到站停车\n");
sem_post(&c);
pthread_exit(0);
}
void* Conductor(void* arg)
{
printf("关车门\n");
sem_post(&d);
printf("售票\n");
sem wait(&c);
printf("开车门\n");
pthread_exit(0);
}
int main(int* argc, char const* argv[])
{
sem_init(&d, 0, 0);
sem_init(&c ,0, 0);
pthread_t Tid[2];
pthread_create(Tid, NULL, Conductor, NULL);
pthread_create(Tid+1 ,NULL, Driver, NULL);
pthread_join(Tid[0], NULL);
pthread_join(Tid[1], NULL);
sem_destroy(&d); 
sem_destroy(&c); 
return 0;
}

这里让两辆车并发,我们会发现结果会出问题,这里是因为两辆车是上车售票下车关着门这一系列事件是互斥的,所以需要进一步优化,我这里不优化了,继续优化需要更详细的模型,大家可以试下

优化互斥,大家可以解决一下

同步案例

读者-写者问题:

核心规则:不可以同时读和写(竞争),读者与读者之间不冲突(同步),写者与写者之间也竞争

伪代码

理发师问题

规则图片中只有一个理发师,理发师一个时刻只能帮一个人剪头发,其他人需要坐在数量有限的椅子上

哲学家就餐问题

哲学家们,只有同时拿到左边和右边的筷子才可以吃饭,除了吃饭其他事件都在思考。

相关文章
|
28天前
|
C++
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
33 6
|
1月前
|
算法 安全 调度
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
34 0
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
|
1月前
|
存储 安全 Linux
【Linux】详解进程通信中信号量的本质&&同步和互斥的概念&&临界资源和临界区的概念
【Linux】详解进程通信中信号量的本质&&同步和互斥的概念&&临界资源和临界区的概念
|
1月前
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(3)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
47 0
|
1月前
|
缓存 算法 Java
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(4)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
56 0
|
1月前
|
C++ 调度
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(2)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
65 0
|
1月前
|
安全 算法 Linux
Linux多线程【线程互斥与同步】
Linux多线程【线程互斥与同步】
52 0
|
7月前
信号量(上)实验
信号量(上)实验
33 0
|
7月前
互斥锁实验
互斥锁实验
24 0