当前位置:嗨网首页>书籍在线阅读

07-信号量操作

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

53.3 信号量操作

与System V信号量一样,一个POSIX信号量也是一个整数并且系统不会允许其值小于0。但POSIX信号量的操作不同于System V信号量的操作,具体包括:

  • 修改信号量值的函数———sem_post()和sem_wait()——一次只操作一个信号量。与之形成对比的是,System V semop()系统调用能够操作一个集合中的多个信号量。
  • sem_post()和sem_wait()函数只对信号量值加1和减1。与之形成对比的是,semop()能够加上和减去任意一个值。
  • System V信号量并没有提供一个wait-for-zero的操作(将sops.sem_op字段指定为0的semop()调用)。

读者看了上面的列表可能会认为,POSIX信号量没有System V信号量强大,然而事实却并非如此——能够通过System V信号量完成的工作都可以使用POSIX信号量来完成。在一些情况下,使用POSIX信号量可能需要多做一些编程工作,但在一般应用场景中,使用POSIX信号量实际所需的编程量要更少。(对于大多数应用程序来讲,System V信号量API过于复杂了。)