进程间通讯之信号量

本文介绍了信号量在进程间通信中的作用,用于保证资源的有序访问,防止多进程、多线程并发访问同一资源导致的不可预测结果。信号量包括一个计数值和一个指向等待进程的指针,通过P操作(减一)和V操作(加一)来控制资源的访问。创建信号量涉及ftok、semget和semctl等函数,通过P和V操作实现对资源的保护。文中还给出了一个简单的示例程序,演示了信号量的使用流程。

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

信号量

    1)为什么需要使用信号量?
        因为我们的系统资源是有限的,但是系统是多任务的,所以存在多进程、多线程,可能同时需要对某一个资源进行访问,用来保证资源的有序访问。
        否则会产生不可预计的结果。

    2)信号量是什么东西?
        信号量是一个计数值,这个值表示当前可用的资源数,这个值也是可用是一个负数,负数的话,表示的是等待的进程数量。还有一个指针,这个指针
        指向等待该信号量的进程
        P操作,减一操作。
        V操作,加一操作。
        操作属于原子操作,是不可被打断一种操作,一定要等待这个操作的完成。要包含的代码要尽量短,而且不要有循环。

    3)如何使用信号量?
        (1)、产生一个key值。
                   #include <sys/types.h>
                   #include <sys/ipc.h>

                   key_t ftok(const char *pathname, int proj_id);
                    pathname  这个路径必须是一个存在的、可访问的的文件
                    proj_id   必须是一个非零的数字,然后通过这个函数就会产生一个key_t类型的标示符。

                返回值:成功就会返回 对应的key值,错误返回-1,并且可以把对应的错误码打印出来看一下是什么错误。
    
        (2)、根据这个key值,去创建一个信号量。不同进程就可以根据这个信号量的ID去找到这个信号量,然后操作它。
                     #include <sys/types.h>
                       #include <sys/ipc.h>
                       #include <sys/sem.h>
                    int semget(key_t key, int nsems, int semflg);
            &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值