В первых двух статьях мы ознакомились с атомарными операциями, базовой техникой lock-free программирования, а также с некоторыми алгоритмами сборки мусора. Мы убедились, что разработка неблокирующих алгоритмов довольно сложна, а разработка эффективных алгоритмов вдвойне сложнee. В этой статье я хочу написать об очень важной составляющей процесса разработки программ – о тестировании и отладке. Отладка многопоточных программ (а тем более неблокирующих) занятие не из простых. Те, кто хоть раз отлаживал сложную систему, знают, как сложно найти ошибку в программе, если ошибка не воспроизводится. Ошибки, возникшие в условиях высокой нагрузки очень сложно воспроизвести в режиме отладки, когда нагрузка отсутствует. Чтобы попадать в подобные ситуации как можно реже, желательно тестировать каждый модуль в отдельности и под высокой нагрузкой с помощью unit-test - ов и в этой статье мы рассмотрим инструмент, предназначенный для тестирования алгоритмов синхронизации, написанных на C++0x.
Показаны сообщения с ярлыком wait-free. Показать все сообщения
Показаны сообщения с ярлыком wait-free. Показать все сообщения
среда, 24 ноября 2010 г.
вторник, 23 ноября 2010 г.
Lock-free программирование - часть 2
В предыдущей статье мы ознакомились с атомарными операциями в C++, с техникой lock-free и wait-free программирование, а также узнали об основной проблеме lock-free программирования в C++. В среде, в которой есть сборщик мусора эта проблема нас бы не волновала, но по стандарту C++ пользователь обязан очищать память с помощью оператора delete и на данный момент очень мало реализаций компилятора C++ имеют механизм сборки мусора. Так или иначе мы не можем надеяться на компилятор и делать наш код непереносимым (за редкими исключениями) и нам придется самим обеспечить сборку мусора для наших структур данных.
пятница, 12 ноября 2010 г.
Lock-free программирование - часть 1
Блокировки являются мощным средством синхронизации действий в многопоточной среде, но как и все мощное, эта это средство таит в себе множество недостатков. Блокировка довольно медленная операция и требует много ресурсов, проблемные блокировки могут вызвать deadlock, поток с низким приоритетом может заблокировать на неопределенное время другой поток, с более высоким приоритетом...и так далее. Эта статья призвана дать базовые знания об альтернативном методе написания потокобезопасного кода.