Apache Ignite vs GridGain?

Как отмечено @R .. в комментариях, это выглядит как ошибка в реализации glibc (если вы используете Linux - я могу воспроизвести это на Linux 2.17, скомпилированном с GCC 4.9.1), в том, что exit() не обеспечивает, в то время как поток смыва и закрытия, нет гонки, когда он вызывается одним потоком, когда несколько потоков используют stdout.

Ниже из руководства flockfile ясно указывает, что наблюдаемое поведение неверно:

Функции stdio являются потокобезопасными. Это достигается путем присвоения каждому объекту FILE блокировки и (если номер блокировки отличен от нуля) принадлежащего потоку. Для каждого вызова библиотеки эти функции ждут, пока объект FILE больше не будет заблокирован другим потоком, затем заблокирует его, выполнит запрошенный ввод-вывод и снова разблокирует объект.

В В свете этого, следующие варианты можно рассматривать как обходные пути (так как ответа на отчет об ошибке нет) в этом конкретном случае, который мы здесь наблюдаем.


Оба потока «делят» stdout, и я думаю, что «дополнительный» вывод печатается из-за преждевременного выхода основного потока.

printf буфера (в sample_thread()) вывод и до того, как он сможет очистить его буфер ( из-за \n в printfs), основной поток завершается. Следовательно, принудительное удаление буфера stdout при выходе из процесса.

Чтобы исправить,

1), вы можете вызвать setbuf() в main() перед созданием потока:

setbuf(stdout, NULL);

в не buffer stdout.

Или 2) вызовите pthread_exit() в обоих потоках, чтобы процесс продолжался, если нить умирает .

Или 3) вызовите pthread_join() в основном потоке, чтобы основной поток ожидал завершения потока sample_thread.

Любой из них избежит проблемы.

0
задан Stephen Darlington 13 July 2018 в 14:09
поделиться

1 ответ

Из веб-сайт :

Apache® Ignite ™ первоначально был внесен в Apache Software Foundation GridGain Systems. Проект быстро превратился в проект Apache высшего уровня с десятками тысяч загрузок в месяц. GridGain Professional Edition, Enterprise Edition и Ultimate Edition построены на Apache Ignite.

В выпусках Enterprise и Ultimate есть некоторые «корпоративные» функции, которые не находятся в версии с открытым исходным кодом.

3
ответ дан Stephen Darlington 17 August 2018 в 12:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: