POSIX信号量

1 篇文章 0 订阅
1 篇文章 0 订阅

信号量分类

链接使用-pthread参数

  1. 无名信号量(基于内存的共享)
    • 单进程内多线程之间可以使用(sem_t)全局变量、堆变量,多进程之间使用共享内存(shm_open);
    • 不再使用信号量,则在内存释放前,调用sem_destory销毁。
    • 使用的函数:
      sem_init
      sem_post
      sem_wait
      sem_getvalue
      sem_destroy
  2. 有名信号量(基于内存文件的共享)
    • 文件名称形式为:/semaphore_name,首个字符为斜杠,后面为非斜杠字符。文件在目录/dev/shm下,名称长度受到文件名长度限制。
    • 文件由sem_open创建或打开,sem_close关闭,sem_unlink删除。若不删除文件,文件可保留至系统关机。
      sem_open
      sem_post
      sem_wait
      sem_getvalue
      sem_close
      sem_unlink

注意点

//pshared=0单进程内多线程间; pshared !=0多进程间。
int sem_init(sem_t *sem, int pshared, unsigned int value);

//立即唤醒阻塞中的wait线程或进程。
int sem_post(sem_t *sem);

//当存在sem_wait阻塞时,value返回值为0(linux)。
int sem_getvalue(sem_t *sem, int *sval);

int sem_wait(sem_t *sem);
//非阻塞, 信号量值为0,立即返回错误,errno=EAGAIN
int sem_trywait(sem_t *sem);
//定时阻塞, 信号量值为0,超时返回错误,errno=ETIMEDOUT
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);

//销毁信号量之前还若有wait的线程或进程,其行为不可控。
int sem_destory(sem_t *sem);

IPC工具:ipcs、ipcrm、ipcmk

ipcs -s 查看存活的信号量
ipcs -i id 查看详情
ipcs -sl 查看信号量系统限制
ipcrm -s semid
ipcrm -S semkey
icpmk -S number

区分SYSTEM V信号量

  • system v信号量使用的是ftok、semget、semop和semctrl。
  • 早期的信号量API接口,不建议使用。
  • -
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值