03-命名信号量
53.2 命名信号量
要使用命名信号量必须要使用下列函数。
- sem_open()函数打开或创建一个信号量并返回一个句柄以供后续调用使用,如果这个调用会创建信号量的话还会对所创建的信号量进行初始化。
- sem_post(sem)和sem_wait(sem)函数分别递增和递减一个信号量值。
- sem_getvalue()函数获取一个信号量的当前值。
- sem_close()函数删除调用进程与它之前打开的一个信号量之间的关联关系。
- sem_unlink()函数删除一个信号量名字并将其标记为在所有进程关闭该信号量时删除该信号量。
SUSv3并没有规定如何实现命名信号量。一些UNIX实现将它们创建成位于标准文件系统上一个特殊位置处的文件。在Linux上,命名信号量被创建成小型POSIX共享内存对象,其名字的形式为sem.name,这些对象将被放在一个挂载在/dev/shm目录之下的专用tmpfs文件系统中(14.10节)。这个文件系统具备内核持久性——它所包含的信号量对象将会持久,即使当前没有进程打开它们,但如果系统被关闭的话,这些对象就会丢失。
在Linux上从内核2.6起开始支持命名信号量。