【Linux】进程间通信之信号量

本文介绍了Linux中进程间通信的信号量机制,详细阐述了信号量的概念、工作原理及其在同步互斥中的作用。通过信号量集如semctl(), semget(), semop()函数的使用,说明如何在实际操作中实现资源访问控制,以确保临界区的正确执行。文章最后通过示例展示了如何使用信号量实现父子进程交叉显示字符,从而演示了信号量的互斥功能。" 126790657,9367298,Cadence OrCAD Capture 打印原理图部分区域指南,"['硬件开发', 'Cadence', '原理图设计']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、为什么要用信号量

       管道和消息队列都是两个或多个进程访问一个共享资源,而为了防止出现因多个线程同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就是提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来协调进程对共享资源的访问,其中共享内存的使用就要用信号量。

开始之前先了解以下概念

*****临界区和临界资源

       临界资源:多道程序系统中存在许多进程,它们共享各种资源,然而有很多资源一次只能供一个进程使用。一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如输入机、打印机、磁带机等。 对于临界资源的访问,必须是互诉进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。
       临界区:每个进程中访问临界资源的那段代码称为临界区。

*****同步与互斥

互斥:进程互斥是进程之间的间接制约关系。互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。对于一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。

同步:进程同步是进程之间的直接制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值