2.3.5 操作系统之信号量机制实现进程的互斥、同步与前驱关系

1 思维导图

在这里插入图片描述

实现进程互斥:

(1)信号量初值设为1;(2)临界区之前对信号执行P操作;(3)临界区之后对信号执行V操作

实现进程同步:

(1)信号量初始值为0;(2)在“前操作”之后执行V操作;(3)在“后操作”之前执行P操作;

实现进程的前驱关系:

(1)每一对前驱关系初值问为0;(2)在每个“前操作”之后执行V操作;(3)在每个”后操作“之前执行P操作。

2 信号量机制实现进程互斥

在这里插入图片描述

(1)信号量初值设为1;

(2)临界区之前对信号执行P操作;

(3)临界区之后对信号执行V操作。

3 信号量机制实现进程同步

想象一下四则运算的顺序,加减乘除;

在这里插入图片描述

进程同步:让本来异步并发的进程相互配合,有序推进。

在这里插入图片描述

(1)信号量初始值为0;

(2)在“前操作”之后执行V操作;

(3)在“后操作”之前执行P操作;

4 信号量机制实现前驱关系

在这里插入图片描述

(1)每一对前驱关系初值问为0;

(2)在每个“前操作”之后执行V操作;

(3)在每个”后操作“之前执行P操作。

转载:2.3.5 操作系统之信号量机制实现进程的互斥、同步与前驱关系_BitHachi的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux中,可以使用信号和PV原语操作机制实现进程同步互斥。 1. 同步机制:可以使用信号实现进程同步信号是一种计数器,它用来控制多个进程对共享资源的访问。在Linux中,信号由semget、semop和semctl三个系统调用来完成。 2. 互斥机制:可以使用PV原语操作机制实现进程互斥。PV原语操作机制可以实现原子操作,保证多个进程对共享资源的访问是互斥的。在Linux中,PV原语操作机制由semaphore.h头文件中的sem_init、sem_wait和sem_post三个函数来实现。 下面是一个简单的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <semaphore.h> sem_t sem; // 定义信号 void *thread_func(void *arg) { sem_wait(&sem); // 等待信号 printf("Thread %d is running\n", *(int *)arg); sem_post(&sem); // 发送信号 return NULL; } int main() { sem_init(&sem, 0, 1); // 初始化信号 pthread_t tid[5]; int i; for (i = 0; i < 5; i++) { int *arg = malloc(sizeof(int)); *arg = i; pthread_create(&tid[i], NULL, thread_func, arg); // 创建线程 } for (i = 0; i < 5; i++) { pthread_join(tid[i], NULL); // 等待线程结束 } sem_destroy(&sem); // 销毁信号 return 0; } ``` 在上面的示例代码中,我们使用了sem_wait和sem_post函数来实现线程的同步。在每个线程中,我们使用sem_wait函数等待信号,当信号的值为1时,线程可以继续执行。在线程执行完后,我们使用sem_post函数发送信号,将信号的值加1,以便其他线程可以继续执行。同时,我们使用sem_init函数初始化信号,使用sem_destroy函数销毁信号

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值