LINUX.ORG.RU

История изменений

Исправление dimgel, (текущая версия) :

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

Хотел было предложить запилить анализатор кода во время компиляции (метапрограммирование, но read-only, без трансформаций). Таким макаром, например, я когда-то проверял всякие условия на своём SQL eDSL в скале, которые если зашивать в систему типов, разбухла бы она до безобразия (ты ведь именно этого хочешь избежать?). Проверка во время компиляции – значит тоже статика, просто сверх того, что умеет собственно язык.

В программе имеются мьютексы m1, m2… mN.

А потом вспомнил из недавно читаного ZeroMQ Guide категорический рецепт избавления от любых проблем с многопоточностью: «just don’t share state». (Мужик конечно жжот, люблю максималистов, хотя по здравому размышлению, заменять atomic bool stopBgThread посылкой сообщения stop фоновому потоку я не готов – но твой случай явно посложнее будет.)

Исходная версия dimgel, :

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

Хотел было предложить запилить анализатор кода во время компиляции (метапрограммирование, но read-only, без трансформаций). Таким макаром, например, я когда-то проверял всякие условия на своём SQL eDSL в скале, которые если зашивать в систему типов, разбухла бы она до безобразия (ты ведь именно этого хочешь избежать?).

В программе имеются мьютексы m1, m2… mN.

А потом вспомнил из недавно читаного ZeroMQ Guide категорический рецепт избавления от любых проблем с многопоточностью: «just don’t share state». (Мужик конечно жжот, люблю максималистов, хотя по здравому размышлению, заменять atomic bool stopBgThread посылкой сообщения stop фоновому потоку я не готов – но твой случай явно посложнее будет.)