飞凌嵌入式ElfBoard-进程间的通信之信号量
信号量(semaphore)是进程和线程间控制共享资源访问的重要机制,用于同步操作。与其他进程间通信(IPC)方式不同,信号量本质上是一个计数器,用来跟踪资源的可用数量,并通过增减信号量的值来控制对共享资源的访问权。信号量的值可以理解为资源的数量,信号量为 0 时表示资源已被占用,当信号量为正数时表示资源可用。
1.在 Linux 中,信号量的主要作用
控制共享资源的访问:信号量充当标志,控制对资源的并发访问,保证只有一个进程或线程能占用资源。
进程与线程同步:信号量可以协调进程或线程的执行顺序,确保资源的访问按指定顺序进行。
Linux 中的信号量也分为 System V 和 POSIX 两种标准,两者在用法和特性上有所不同;System V 信号量提供了一个信号量集,可以通过一个信号量标识符(semid)来管理多个信号量。其典型操作函数在 sys/sem.h 头文件中声明。System V 信号量适用于需要多进程共享多个信号量的情况,使用较为复杂,适合更细粒度的控制。POSIX 信号量在 Linux 2.6 之后引入,提供了单个信号量对象管理。POSIX 信号量分为 命名信号量(可以在不同进程之间共享,通过信号量的名称来标识) 和非命名信号量(只能在同一进程的线程间共享,不支持跨进程)两种。
2.System V信号量的操作
创建和初始化信号量:通过 semget 创建或获取信号量集。
信号量的 P(wait)操作:通过 semop 减少信号量的值,如果信号量为 0,则等待直到信号量大于 0。
信号量的 V(signal)操作:通过 semop 增加信号量的值,释放对资源的访问权。
控制和删除信号量:通过 semctl 设置或获取信号量的值,或删除信号量。
3.POSIX信号量操作
相对而言,POSIX 信号量的操作更为简单,主要使用以下函数:
创建和初始化信号量:
sem_open:用于创建或打开命名信号量。
sem_init:用于初始化非命名信号量。
信号量的 P(wait)操作:
sem_wait:等待信号量,若信号量值为 0,则阻塞。
信号量的 V(signal)操作:
sem_post:释放信号量,增加信号量的值。
控制和删除信号量:
sem_close:关闭信号量。
sem_unlink:删除命名信号量。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)