gpt4 book ai didi

c++ - 我可以将 "force"线程唤醒吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:10 25 4
gpt4 key购买 nike

我想实现一个快速记录器,它保存日志条目,当某个触发器到达时,它会刷新最后的 X 条消息。

所以我们的想法是将所有消息保存在一个循环缓冲区中,一旦我们有了触发器,就将它的 ID 推送到一个队列,另一个线程监视该队列(所有系统中的一个线程)。该线程将返回 X 条消息并刷新它们。我知道如何处理在我尝试刷新时正在写入的消息,在我刷新之前已被覆盖的消息,在我尝试更新它们时被刷新的消息等。

我的问题是,例如,如果我有 20 个线程写入消息,并且只有 10 个内核,在 2 个“编写器”线程执行之间的时间差异中,所有缓冲区将被多次覆盖。

“我的”线程有什么办法可以“强制”“作者”线程执行(或给它时间片吗?我想没有,但仍然...你能就任何其他方式/设计提出建议来克服这个问题吗?

最佳答案

据我了解,您希望在队列中有可用的新 ID 后立即恢复您的话题。锁定原语是可能的——您的编写器线程应该休眠,直到您的触发线程收到通知。如何实现此行为取决于您使用的多线程框架。

例如,在 C++11 中,您可以查看 std::condition_variable .

编辑。 正如评论中提到的,磁盘 IO 很慢,因此您需要在写入线程中将消息提取到内存中,然后才将它们写入磁盘。在 IO 期间,缓冲区可能会被到达的消息覆盖。

关于c++ - 我可以将 "force"线程唤醒吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953960/

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