线程之间的信号

时间:2016-01-21 01:27:41

标签: java .net multithreading

这是伪代码中的访谈问题。我被告知以下方法存在问题。除了在事件等待时保持主线程,我找不到任何其他东西。你们能看到任何真正的问题吗?

以下是问题:

有一个主线程和一个子线程。子线程正在监视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;
}

1 个答案:

答案 0 :(得分:1)

子线程不会等待主线程读取数据,所以它可以在读取旧数据之前用新数据覆盖它。

通常在这种情况下,您可以维护2个或更多子线程可以写入的缓冲区。当主线程正在读取一个时,子线程正在写下一个。当所有缓冲区都已满时,子线程必须等待主线程完成一个。

请参阅:https://en.wikipedia.org/wiki/Multiple_buffering