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过于复杂了。)