c++20 中的 std::jthread 是什么?

Waq*_*med 15 c++ multithreading c++20

  1. 它提供了哪些优势 std::thread
  2. 它会弃用现有的std::thread吗?

Nic*_*las 23

std::jthread就像std::thread,只有没有愚蠢。看,std::thread如果你不这样做,的析构函数会终止程序join或事先手动分离它。这导致了大量错误,因为人们期望它加入破坏。

jthread解决这个问题;默认情况下,它在销毁时加入(因此得名:“加入线程”)。它还支持要求线程停止执行的机制,尽管没有强制执行此操作(又名:您不能使另一个线程停止执行)。

目前,没有计划弃用std::thread.

  • 我想知道谁的好主意是尝试塞入暂停执行功能。这永远行不通。30 年来,它在任何地方都没有发挥过作用。每个人都必须像往常一样使用自己的显式条件变量。 (4认同)
  • @Waqar,您将 `std::stop_token` 作为函数的第一个参数,并定期检查 `stop_requested` 是否为 true (4认同)
  • @Waqar:你可以这样看,但不一定是这样实现的。 (2认同)
  • @ZanLynx 它*有*一个显式条件变量,它传递给它运行的函数。 (2认同)