信号量
  1. sem_close()函数:
    • 作用: 关闭由 sem_open() 函数打开的信号量。
    • 原型: int sem_close(sem_t *sem);
    • 说明: 当一个进程不再需要使用某个由 sem_open() 打开的信号量时,应该调用 sem_close() 来关闭该信号量。这样可以释放与该信号量相关的资源。每次调用 sem_open() 都应该有一个对应的 sem_close() 来平衡。
  2. sem_unlink()函数:
    • 作用: 从系统中删除一个命名的信号量。
    • 原型: int sem_unlink(const char *name);
    • 说明: sem_unlink() 函数用于从系统中删除一个由 sem_open() 创建的命名信号量。它只是从系统中移除该信号量的名称,而实际的信号量对象并不会立即被删除。只有在最后一个使用该信号量的进程调用了 sem_close() 之后,该信号量对象才会被真正删除。sem_close()函数:
    • 作用: 与上面的 sem_close() 函数相同,都是用于关闭由 sem_open() 打开的信号量。
  3. 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);
上一篇
下一篇