当前位置: 首页 > 知识库问答 >
问题:

什么时候应该使用STD::Thread::Joinable?

陶弘业
2023-03-14

如果->get_id()==std::this_thread::get_id()(检测到死锁),resource_deadlock_would_accurt

这种方法的唯一目的是检测这样的情况吗?我们目前厚颜无耻地只调用thread->join,而没有一个可接合的包装器,这样的方法有什么危险?

共有1个答案

尚阳炎
2023-03-14

从你引用的信息来看:

因此默认构造的线程是不可接合的。

这就是你的答案。如果您不知道您的线程是否是默认构造的,您就不知道它是否是可接合的。

#include <thread>

void bar(const unsigned int);

/**
 * This class may be default-constructed (in which case it does nothing),
 * or constructed with an `unsigned int` argument which shall be passed
 * to `bar()` in a worker thread.
 */
struct Foo
{
   Foo() {}

   Foo(const unsigned int x)
      : doThingsThread([&]() { bar(x); })
   {}

   ~Foo()
   {
      // The thread *MUST* be joined before destruction, if it
      // is joinable. Otherwise, it *CAN'T* be joined.
      if (doThingsThread.joinable())
         doThingsThread.join();
   }
private:
   std::thread doThingsThread;
};
 类似资料:
  • 问题内容: 执行器似乎是干净的抽象。您何时想直接使用Thread而不是依赖更强大的执行程序? 问题答案: 为了提供一些历史记录,仅在Java 1.5中将Executors作为Java标准的一部分添加。因此,在某些方面,执行程序可以看作是处理Runnable任务的更好的新抽象。 有点过分简化了…-执行器执行正确,因此优先使用它们。

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的: 另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途: 在Python文档中,装饰器的解释如下: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想指的是自己(而不是实例)。我不完全理解为什么会这样,因为我总是可

  • 问题内容: 我看过各种文章,但我仍然不知道为什么不应该使用它。请让我知道您的想法。 问题答案: 我发现有必要在错误的设计中使用instanceof提示。可以肯定的是,将会出现一个大型,复杂的开关风格的构造。在我看到的其他大多数情况下,我们应该使用多态而不是instanceof。请参阅策略模式。(相关的使用示例) 我唯一需要使用的是实现时。