четверг, 2 декабря 2010 г.

Переезд Блога

Уважаемые посетители,

Блог переехал на http://www.data-race.com

Извините за неудобства.

среда, 24 ноября 2010 г.

Lock-free программирование - часть 3

В первых двух статьях мы ознакомились с атомарными операциями, базовой техникой lock-free программирования, а также с некоторыми алгоритмами сборки мусора. Мы убедились, что разработка неблокирующих алгоритмов довольно сложна, а разработка эффективных алгоритмов вдвойне сложнee. В этой статье я хочу написать об очень важной составляющей процесса разработки программ – о тестировании и отладке. Отладка многопоточных программ (а тем более неблокирующих) занятие не из простых. Те, кто хоть раз отлаживал сложную систему, знают, как сложно найти ошибку в программе, если ошибка не воспроизводится. Ошибки, возникшие в условиях высокой нагрузки очень сложно воспроизвести в режиме отладки, когда нагрузка отсутствует. Чтобы попадать в подобные ситуации как можно реже, желательно тестировать каждый модуль в отдельности и под высокой нагрузкой с помощью unit-test - ов и в этой статье мы рассмотрим инструмент, предназначенный для тестирования алгоритмов синхронизации, написанных на C++0x.

вторник, 23 ноября 2010 г.

Lock-free программирование - часть 2

В предыдущей статье мы ознакомились с атомарными операциями в C++, с техникой lock-free и wait-free программирование, а также узнали об основной проблеме lock-free программирования в C++. В среде, в которой есть сборщик мусора эта проблема нас бы не волновала, но по стандарту C++ пользователь обязан очищать память с помощью оператора delete и на данный момент очень мало реализаций компилятора C++ имеют механизм сборки мусора. Так или иначе мы не можем надеяться на компилятор и делать наш код непереносимым (за редкими исключениями) и нам придется самим обеспечить сборку мусора для наших структур данных.

пятница, 12 ноября 2010 г.

Lock-free программирование - часть 1

Блокировки являются мощным средством синхронизации действий в многопоточной среде, но как и все мощное, эта это средство таит в себе множество недостатков. Блокировка довольно медленная операция и требует много ресурсов, проблемные блокировки могут вызвать deadlock, поток с низким приоритетом может заблокировать на неопределенное время другой поток, с более высоким приоритетом...и так далее. Эта статья призвана дать базовые знания об альтернативном методе написания потокобезопасного кода.

суббота, 6 ноября 2010 г.

Thread-Safe Singleton

Singleton является, пожалуй одним из самых известных шаблонов проектирования, но на практике его традиционная реализация имеет множество проблем в многопоточной среде. В этой статье я попытаюсь объяснить, почему традиционные реализации singleton-а не потокобезопасны и какие способы существуют для достижения его потокобезопасной реализации.
Взглянем на два варианта традиционной реализации singleton-а.

пятница, 29 октября 2010 г.

Memory Barriers

Что такое барьеры памяти, какие проблемы они решают и почему они свалились на головы программистов? Вкратце – все из-за борьбы за производительность. Для лучшего понимания нужно рассмотреть как работает процессор и как происходит кэширование.