使用std::jthread有什么优势?

8

C++20引入了std::jthread。据我所知,它在所有方面都比std::thread更好。除了通常的限制,例如C++20的可用性、实现质量、与库的交互等情况外,是否存在任何场景下使用std::thread更优?


3
更多并不总是更好 https://godbolt.org/z/n3xTb6 - 463035818_is_not_a_number
1
@largest_prime_is_463035818 我认为,特别是对于像线程这样的复杂对象,更多的成本并不在于额外的8个字节。你的观点很好,但演示不太充分 :) - spectras
jthread旨在使事情更加“客户友好”。它消除了客户端的“哦,我需要加入我的线程”的担忧,使实现不良设计变得更加困难。 - N. Prone
@spectras 同意。我承认我太过于字面理解“在各方面更好”的含义,只是使用了我能找到的第一个反例。如果忽略实现质量,则 std::thread 也可以使用16,我的观点就无效了。 - 463035818_is_not_a_number
@largest_prime_is_463035818 不,你说得完全对。大小差异来自于停止源。我不会把它归为实现质量。 - flowit
1个回答

11

std::jthread类似于拥有std::stop_sourcestd::thread

C++是一种语言,其主要概念是不必为你不使用的内容付费。

因此:如果您不需要std::stop_source,则应该优先选择std::thread,以免为此支付。

即使您确实需要一个,出于与使用boost::intrusive_ptr而不是std::shared_ptr相同的原因(即能够管理数据局部性),您仍可能更喜欢不使用std::jthread并将停止源保留在其他地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接