gpt4 book ai didi

c++ - sem_destroy 一个信号量被其他人持有 sem_wait?

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:11 27 4
gpt4 key购买 nike

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

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

Destroying a semaphore that other processes or threads are currently blocked on (in sem_wait(3)) produces undefined behavior.

但是,我碰巧看到很多多线程 C++ 应用程序都在使用它。

我的主要问题:

  • 这样做有什么目的吗?
  • 他们试图实现什么(例如,这会隐式终止线程)?
  • 那不是很不安全吗?

最佳答案

在我听过的任何 API 中,我想不出有哪一个案例在使用过程中破坏某些东西是理智的或明确的。所以在我看来,你的问题的答案是:

So what were they trying to achieve?

我不知道。

shouldn't that be very unsafe?

是的!

也许您看过的那些其他程序的作者知道这些实现实际上做了什么并且依赖于它。但他们必须为 future 可能发生变化的情况做好准备。也许他们已经权衡了这种改变破坏他们的程序的风险与他们通过走捷径和依赖未定义的行为所实现的节省,并认为这是值得的。您必须自己做出判断。

关于c++ - sem_destroy 一个信号量被其他人持有 sem_wait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076624/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com