Является ли такая синхронизация на основе идентификатора потока безопасной и аккуратной?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли такая синхронизация на основе идентификатора потока безопасной и аккуратной?

Сообщение Anonymous »

Я написал небольшую программу искусственного интеллекта, которая решает головоломки IQ Twist. Затем в качестве упражнения я распараллелил это. Вот источник:
IQTwist Resolver.
Алгоритм поиска решения является рекурсивным.
Я использовал синхронизацию на основе идентификатора потока в критической части рекурсивной функции (сбор найденных фигур в массив элементов). Важнейшие части, о которых я говорю:

Код: Выделить всё

bool IQTwistResolver::searchForSolution(const int type, const uint32 a_union)
{
if (m_stopSearch) //make all other threads unwind recursion and finish
return false;

if (TYPES_COUNT == type) //all types reached and solved - end recursion
{
m_mutex.lock();
if (std::thread::id::id() == m_firstFinder || std::this_thread::get_id() == m_firstFinder)
{
m_firstFinder = std::this_thread::get_id();
m_stopSearch = true;
}
m_mutex.unlock();
return true; //return true to collect the solution and unwind
}
...
Я пытаюсь обратиться за советом к экспертам:
Есть ли у этого подхода какие-либо возможные слабости/недостатки или излишки (возможно, я упускаю какое-то более простое решение)?
Вы бы использовали другой метод защиты этого «буфера решения»?
Возможно, вы бы использовали совершенно другую схему распараллеливания (стоит знать, что тоже)?

Подробнее здесь: https://stackoverflow.com/questions/581 ... e-and-neat
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»