Это вопрос интервью в псевдокоде. Мне сказали, что есть проблемы в следующем подходе. Я не мог найти ничего другого, кроме как удерживать основной поток, пока событие ждет. Можете ли вы, ребята, увидеть какие-то реальные проблемы?Сигнал между потоками
Вот вопрос:
Существует основной поток и дочерний поток. Детский поток контролирует сообщение 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;
}
Если я понимаю код правильно, нет никакого смысла в использовании детской нити, как это. Как вы писали, основной процесс ждет, пока ребенок прочитает 1K. Он мог бы также прочитать сам 1K. –