前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux 进程通信-信号量(Semaphore)《Rice linux 学习开发》

linux 进程通信-信号量(Semaphore)《Rice linux 学习开发》

作者头像
Rice加饭
发布2022-05-09 21:22:50
1.4K0
发布2022-05-09 21:22:50
举报
文章被收录于专栏:Rice嵌入式Rice嵌入式

Semaphore概述

信号量:它是不同进程或者一个给定进程内部不同线程间同步的机制

  • 二值信号量:值为0或者1,与互斥锁类似,资源可用时,值为1,不可用时,值为0
  • 计数信号灯:值在0到n之间。用来统计资源,其值代表可用资源数
  • 等待操作:等待信号灯的值变为大于0,然后将其减1;而释放操作则相反,用来唤醒等待资源的进程或者线程

System V 信号灯(进程同步):是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。而Posix信号灯(线程同步)指的是单个计数信号灯

System V 信号灯由内核维护

信号量的使用规则

  • 若信号量为正,则进程可使用该资源
  • 若信号量为0,则进程阻塞等待,并将进程插入等待队列,直到该信号量的值大于0从等待队列中执行进程请求
  • 加锁操作:如果信号量大于0,则信号量-1;如果信号量为0,则挂起该进程,并将这个进程插入等待队列
  • 解锁操作:如果等待队列中有进程则唤醒该进程,让它恢复运行,否则,信号量+1

信号量相关函数

semget()函数:创建新的信号量或取得已有的信号量

semop()函数:改变信号量的值,改变操作在sem_opa中,sem_opa是sumbuf结构体对象

semctl()函数:控制信号量

例程

信号量例程请参考github的semaphore目录下semaphore.c。github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 信号量:它是不同进程或者一个给定进程内部不同线程间同步的机制
  • System V 信号灯(进程同步):是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。而Posix信号灯(线程同步)指的是单个计数信号灯
    • System V 信号灯由内核维护
    • 信号量的使用规则
    • 信号量相关函数
      • semget()函数:创建新的信号量或取得已有的信号量
        • semop()函数:改变信号量的值,改变操作在sem_opa中,sem_opa是sumbuf结构体对象
          • semctl()函数:控制信号量
          • 例程
            • 信号量例程请参考github的semaphore目录下semaphore.c。github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档