gpt4 book ai didi

c++ - cout on extra thread - 线程安全

转载 作者:行者123 更新时间:2023-11-28 02:19:09 25 4
gpt4 key购买 nike

我的主线程中有一个非常时间敏感的任务。但是,我还想同时打印一些关于这个任务的信息。

问题:cout 需要一些时间来执行,因此会减慢主线程中时间敏感的任务。

想法:我想创建一个额外的线程来处理输出。为了在主线程和新创建的线程之间进行通信,我想到了一个包含应打印的字符串的 vector 。在新创建的线程中,一个无限的 while 循环会一个接一个地打印这些字符串。

想法的问题: vector 不是线程安全的。因此,我担心锁定和解锁 vector 所花费的时间几乎与在主线程中直接调用 cout 所花费的时间一样多。

问题:是否有锁定/解锁 vector 的替代方法?我对 vector 锁定的担忧是否被误导了?您会采用完全不同的方法来解决问题吗?

最佳答案

根据任务的时间敏感性,我可能会在生产者线程中构建一个输出 vector ,然后将整个 vector 传递给消费者线程(并根据需要重复)。

两者之间的队列需要是线程安全的,但您可以通过每隔 50-100 毫秒左右传递一个 vector 来保持开销很小。对于大多数观察者来说,这仍然足够短,看起来像是实时的,但也足够长,可以在大多数情况下将锁定的开销保持在极低的水平。

关于c++ - cout on extra thread - 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33136517/

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