信号量与TCP/IP套接字编程详解
信号量基础
信号量是用于协调不同进程间操作的数据对象,常被用来共享一次只能由一个进程使用的资源。Linux内核负责维护信号量的状态,而非用户进程。若系统中安装了Linux内核源代码,可查看 include 文件 sem.h ,了解内核用于维护信号量状态信息的 semid_ds 数据结构的定义。
使用信号量时会用到三个系统调用:
- semget :返回内核分配的整数信号量索引。
- semop :对信号量集执行操作。
- semctl :对信号量集执行控制操作。
使用信号量时需注意两个问题:死锁和释放信号量资源。若有多个资源的访问由信号量控制,就可能发生死锁。例如,两个进程需要访问两个不可共享的资源,一个进程可能获得一个资源的信号量锁,却因另一个进程锁定了第二个资源并等待第一个资源,而永远等待下去。在使用信号量时,程序终止前释放信号量非常重要。
信号量示例程序
文件 IPC/SEMAPHORE/semaphore.c 中的示例程序展示了如何创建信号量集以及访问该集合的元素。此示例用于两个进程协调对单个资源的访问,资源通过任意整数值标识。示例程序会读取和设置信号量,在实际应用中,多个程序需使用相同的资源值来访问同一信号量集。
示例程序 semaphore.c 的具体操作如下:
1. 创建唯一键并创建信号量。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



