sem_close()
函数:- 作用: 关闭由
sem_open()
函数打开的信号量。 - 原型:
int sem_close(sem_t *sem);
- 说明: 当一个进程不再需要使用某个由
sem_open()
打开的信号量时,应该调用sem_close()
来关闭该信号量。这样可以释放与该信号量相关的资源。每次调用sem_open()
都应该有一个对应的sem_close()
来平衡。
- 作用: 关闭由
sem_unlink()
函数:- 作用: 从系统中删除一个命名的信号量。
- 原型:
int sem_unlink(const char *name);
- 说明:
sem_unlink()
函数用于从系统中删除一个由sem_open()
创建的命名信号量。它只是从系统中移除该信号量的名称,而实际的信号量对象并不会立即被删除。只有在最后一个使用该信号量的进程调用了sem_close()
之后,该信号量对象才会被真正删除。sem_close()
函数: - 作用: 与上面的
sem_close()
函数相同,都是用于关闭由sem_open()
打开的信号量。
sem_destroy()
函数:- 作用: 销毁由
sem_init()
初始化的信号量。 - 原型:
int sem_destroy(sem_t *sem);
- 说明:
sem_destroy()
函数用于销毁一个由sem_init()
初始化的信号量。它会立即释放信号量所占用的所有资源,而不管还有没有进程在使用该信号量。
- 作用: 销毁由
总结:
sem_close()
和sem_unlink()
是用于管理由sem_open()
创建的命名信号量。sem_close()
关闭信号量,sem_unlink()
从系统中删除信号量。sem_close()
和sem_destroy()
都是用于关闭/销毁信号量,但适用的信号量类型不同。sem_close()
用于sem_open()
创建的信号量,sem_destroy()
用于sem_init()
初始化的信号量。
使用方法对比:
sem_open()
创建的信号量:- 打开信号量:
sem_t *sem = sem_open("/name", O_CREAT, 0644, 1);
- 使用信号量:
sem_wait(sem);
- 关闭信号量:
sem_close(sem);
- 删除信号量:
sem_unlink("/name");
- 打开信号量:
sem_init()
初始化的信号量:- 初始化信号量:
sem_t sem; sem_init(&sem, 0, 1);
- 使用信号量:
sem_wait(&sem);
- 销毁信号量:
sem_destroy(&sem);
- 初始化信号量: