История изменений
Исправление eao197, (текущая версия) :
Итак, специальную олимпиаду прошу считать открытой!
Кстати говоря, когда-то на The Computer Language Benchmark Game был такой простой бенчмарк chameneos. Четыре хамелеона разных цветов должны были N раз приходить на место встречи. На это место одновременно могли войти только два хамелеона, остальные должны были ждать, пока место освободится. Те, что попали на место встречи, должны были обменяться цветами и уйти с места встречи. Когда каждый хамелеон N раз побывает на месте встречи, тест завершается. Потом, правда, простой вариант chameneos заменили на чуть усложненный chameneos_redux.
Но вот простой вариант chameneos я давным-давно делал с помощью ACE. Вот код этого варианта.
Не так давно этот же тест был реализован и на SO, вот его код в стандартных примерах SO-5.5.0. (Вот подробное описание этого теста для версии 5.3)
Понятно, что код на SO объемнее. Но, с другой стороны, в нем нет ни одного mutex-а, ни одного condition-а, ни одной явной команды на создание/завершение/ожидание рабочей нити. Так что в логике разобраться проще. Кто не верит, пусть попробует с ходу понять, зачем в ACE-овском варианте два condition-а.
PS. Помнится, когда я делал ACE-овскую реализацию, то нашел баг в одной из реализаций этого теста на Benchmark Game-е: для какого-то языка была реализация, в которой один из хамелеонов вообще не участвовал в проведении встреч.
Исходная версия eao197, :
Итак, специальную олимпиаду прошу считать открытой!
Кстати говоря, когда-то на The Computer Language Benchmark Game был такой простой бенчмарк chameneos. Четыре хамелеона разных цветов должны были N раз приходить на место встречи. На это место одновременно могли войти только два хамелеона, остальные должны были ждать, пока место освободится. Те, что попали на место встречи, должны были обменяться цветами и уйти с места встречи. Когда каждый хамелеон N раз побывает на месте встречи, тест завершается. Потом, правда, простой вариант chameneos заменили на чуть усложненный chameneos_redux.
Но вот простой вариант chameneos я давным-давно делал с помощью ACE. Вот код этого варианта.
Не так давно этот же тест был реализован и на SO, вот его код в стандартных примерах SO-5.5.0. (Вот подробное описание этого теста для версии 5.3)
Понятно, что код на SO объемнее. Но, с другой стороны, в нем нет ни одного mutex-а, ни одного condition-а, ни одной явной команды на создание/завершение/ожидание рабочей нити. Так что в логике разобраться проще. Кто не верит, пусть попробует с ходу понять, зачем в ACE-овском варианте два condition-а.
PS. Помнится, когда я делал ACE-овскую реализацию, то