sem_destroy其他人持有sem_wait的信号量?

时间:2012-12-28 22:33:45

标签: c++ posix semaphore

如果你在sem_wait()上有一个线程(thread1)阻塞而另一个线程(thread2)使用sem_destroy()破坏了那个信号量,那么thread1会发生什么?

A quick search on the internet tells me that it produces undefined behavior:

  

销毁其他进程或线程当前被阻塞的信号量(在sem_wait(3)中)会产生未定义的行为。

但是,我碰巧看到在许多多线程c ++应用程序中使用它。

我的主要问题:

  • 这有什么用途吗?
  • 他们想要实现什么(例如,这会隐式终止线程)吗?
  • 这不应该是非常不安全的吗?

1 个答案:

答案 0 :(得分:3)

我无法想到任何API中的单个案例我曾经听说过在使用过程中销毁某些东西的地方是理智的还是定义的。所以在我看来,你的问题的答案是:

  

那么他们想要实现什么目标?

我不知道。

  

不应该非常不安全吗?

是!

也许您所看过的其他程序的作者都知道实现的实际操作并依赖于它。但是他们必须为将来会发生变化的可能性做好准备。也许他们已经权衡了这种改变的风险,他们通过采取捷径并依赖未定义的行为来判断它是值得的,从而打破了他们的计划。你必须为自己做出判断。