[#] Обзор примитивов синхронизации — Семафор и немного lockless-а
habrabot(difrex,1) — All
2016-03-06 15:00:03


В [прошлой заметке][1] мы обсудили самую известную пару из лагеря инструментов синхронизации тредов — mutex и cond. Сегодня встретимся с sema — примитивом, который умеет заменять предыдущие два в одиночку. Но сначала — пара слов о случайных пробуждениях. (Спасибо [xaizek][2], который мне об этом напомнил.) В принципе, строго реализованные механизмы синхронизации этим не страдают, но, тем не менее, опытный программист на это никогда не полагается. Напомню фрагмент кода:

while(total_free_mem <= 0)
{
wait_cond(&got_free_mem, &allocator_mutex);
}


Здесь цикл вокруг wait\_cond гарантирует нам, что даже если мы вернёмся из ожидания события случайно или по ошибке, ничего страшного не случится — проверка в while обеспечит нам уверенность, что нужное состояние проверяемого объекта достигнуто. Если нет — поспим ещё в ожидании. Отметим ещё раз, что проверяем мы состояние объекта (total\_free\_mem <= 0) при запертом мьютексе, то есть никто не может его менять в то же самое время. [Читать дальше →][3]

[1]: https://habrahabr.ru/post/278413/
[2]: https://habrahabr.ru/users/xaizek/
[3]: https://habrahabr.ru/post/278661/#habracut