我想实现一个快速记录器,它包含日志条目,并且当某个触发器到达时,它将刷新最后的X条消息。我可以“强制”线程唤醒吗?
这样的想法是保持在一个循环缓冲区中的所有消息,一旦我们有触发,推它的ID到队列中,而另一线程监视(在所有系统中的一个线程)。此线程将返回X消息并刷新它们。我知道如何处理在我尝试刷新时正在写入的消息,在刷新正在刷新的消息之前已被覆盖的消息,而我试图更新它们等。
我的问题是,例如我有20个线程写消息,只有10个内核,在2个“writer”线程执行之间的时间差,所有的缓冲区都会被覆盖好几次。
有没有什么办法可以让“我的”线程“强制”“编写器”线程执行(或给它是时间片?我猜不,但是仍然... 你能建议任何其他方式/设计来克服这个问题
取决于,但一次有多个线程写入硬盘驱动器会在硬盘驱动器达到饱和CPU处理速度之前很久就会饱和硬盘驱动器的速度。为了简单起见,我只有一个写线程: - /。在任何一种情况下,互斥锁或文件锁将有助于确保只有1(fifo)线程可以访问缓冲区或写入位置。 – IdeaHat
@MadScienceDreams:是的,我有一个作家(相应地更新了问题)。但问题仍然存在,笔者有机会刷新它 – yosim
可以给该线程优先级更高,所以只要用信号(通过条件变量之前缓冲区被覆盖,互斥,信号量,读者,作家锁,无论你想要什么),系统调度程序将执行该线程。请注意,您的问题可以通过更好的设计得到更好的解决。如果你的缓冲区在没有你的控制的情况下被覆盖,那么你需要重新思考你的日志机制。 – Shahbaz