我在代码中使用 POSIX
unnamed semaphore
。我想用 sem_destroy
来销毁信号量。但我读了Linux手册页。它说“销毁其他进程或线程当前被阻塞的信号量(在 sem_wait(3) 中)会产生未定义的行为。”。
我的问题是:
如何安全地使用 sem_destroy(避免在其他线程或进程被阻塞时调用 sem_destroy)
如何安全地使用 sem_destroy(避免在其他线程或进程被阻塞时调用 sem_destroy)
你的情况可能会更好不是。当没有剩余进程可以访问未命名信号量时,它将自动清理。
但是如果您坚持这样做,那么您需要认识到销毁同步对象(例如信号量)的唯一安全时间是当有权访问它的每个进程的每个线程都“完成”时。最常见的是,您知道是这种情况,因为当前线程是唯一可以访问信号量的活动线程。如果对所涉及的各种线程和进程的行为有足够的了解,您可能能够更快地了解,甚至设计出正确的环境。