这是伪代码中的访谈问题。我被告知以下方法存在问题。除了在事件等待时保持主线程,我找不到任何其他东西。你们能看到任何真正的问题吗?
以下是问题:
有一个主线程和一个子线程。子线程正在监视30K消息,该消息以1K块的形式从外部源发送。一旦子线程看到1K块准备就绪,它就会发出主线程函数的信号以检索数据。伪代码是:
// This method is called in main thread
void MainThreadFunction(out message)
{
var buffer;
loop
{
event.Wait;
read data to buffer;
event.Release;
if (all the data of the message complete)
{
exit loop;
}
}
copy buffer to message;
}
// This method is in child thread
void ChildThreadFunction()
{
// once the 1K chunk of data is ready
event.Set;
}
答案 0 :(得分:1)
子线程不会等待主线程读取数据,所以它可以在读取旧数据之前用新数据覆盖它。
通常在这种情况下,您可以维护2个或更多子线程可以写入的缓冲区。当主线程正在读取一个时,子线程正在写下一个。当所有缓冲区都已满时,子线程必须等待主线程完成一个。