Ditch your (mut)ex, you deserve better
Современные компьютеры имеют несколько ядер, но инструменты синхронизации, такие как мьютексы и семафоры, практически не эволюционировали с момента их создания. Автор утверждает, что управление разделяемым состоянием между потоками остается сложной задачей, и приводит пример банковского счета с операциями пополнения и снятия средств. В многопоточном режиме возникает проблема гонки данных: когда два потока одновременно пытаются снять деньги с одного счета, каждый может проверить баланс, увидеть достаточное количество средств, но после снятия обоими потоками итоговый баланс станет отрицательным.
Эта ошибка особенно коварна, так как она возникает при добавлении многопоточности в ранее корректный код. Автор подчеркивает, что даже простая проверка баланса может прерваться планировщиком потоков, что приводит к некорректным результатам. Статья демонстрирует, как эволюция однопоточного приложения в многопоточное может introduce критические ошибки в совершенно无关 частях кода без каких-либо изменений в этих частях.