0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: программирование на с++, многопоточное программирование, lock-free алгоритмы и структуры данных, lock-free, атомарность, многопоточные алгоритмы, неатомарные процессы, атомарные процессы</p>
1
<p>Теги: программирование на с++, многопоточное программирование, lock-free алгоритмы и структуры данных, lock-free, атомарность, многопоточные алгоритмы, неатомарные процессы, атомарные процессы</p>
2
<p>В одной из предыдущих заметок мы упоминали о<strong>Lock-Free</strong>алгоритмах и<a>сложностях</a>, с ними связанных. Какая ситуация вообще приводит к проблемам? Лучше всего понять это помогает простейший пример бронирования номеров в отеле.</p>
2
<p>В одной из предыдущих заметок мы упоминали о<strong>Lock-Free</strong>алгоритмах и<a>сложностях</a>, с ними связанных. Какая ситуация вообще приводит к проблемам? Лучше всего понять это помогает простейший пример бронирования номеров в отеле.</p>
3
<p>Итак, представьте, что<strong>Джон</strong>позвонил менеджеру гостиницы и попросил забронировать номер<strong>303</strong>. В то же самое время,<strong>Билл</strong>зашёл в здание отеля и обратился в ресепшен с точно такой же просьбой. Менеджер и сотрудник респешен-зоны находятся в разных офисах, но имеют<strong>одинаковые права доступа в базу данных</strong>.</p>
3
<p>Итак, представьте, что<strong>Джон</strong>позвонил менеджеру гостиницы и попросил забронировать номер<strong>303</strong>. В то же самое время,<strong>Билл</strong>зашёл в здание отеля и обратился в ресепшен с точно такой же просьбой. Менеджер и сотрудник респешен-зоны находятся в разных офисах, но имеют<strong>одинаковые права доступа в базу данных</strong>.</p>
4
<p>Они одновременно открывают БД и видят, что номер 303<strong>свободен</strong>. Они говорят клиенту (каждый своему), что всё ок, и вносят изменения. Далее сотрудники отеля нажимают на подтверждение внесённых изменений, и... система оказывается в ситуации<strong>обработки двух конфликтных запросов</strong>.</p>
4
<p>Они одновременно открывают БД и видят, что номер 303<strong>свободен</strong>. Они говорят клиенту (каждый своему), что всё ок, и вносят изменения. Далее сотрудники отеля нажимают на подтверждение внесённых изменений, и... система оказывается в ситуации<strong>обработки двух конфликтных запросов</strong>.</p>
5
<h2>Что произойдёт в результате?</h2>
5
<h2>Что произойдёт в результате?</h2>
6
<p>На самом деле, возможны следующие варианты: 1. Номер не достанется<strong>никому</strong>, система вернёт сообщение о конфликте. 2. Номер достанется<strong>Биллу</strong>, данные о Джоне будут перезаписаны, удалены. 3. Номер достанется<strong>Джону</strong>по аналогичной схеме. 4. Произойдёт серьёзный программный<strong>сбой</strong>с нарушением работоспособности. Придётся вызывать техперсонал, работа БД будет временно парализована.</p>
6
<p>На самом деле, возможны следующие варианты: 1. Номер не достанется<strong>никому</strong>, система вернёт сообщение о конфликте. 2. Номер достанется<strong>Биллу</strong>, данные о Джоне будут перезаписаны, удалены. 3. Номер достанется<strong>Джону</strong>по аналогичной схеме. 4. Произойдёт серьёзный программный<strong>сбой</strong>с нарушением работоспособности. Придётся вызывать техперсонал, работа БД будет временно парализована.</p>
7
<p>Реализация вариантов 2 или 3 может закончиться скандалом между клиентами непосредственно в номере, причём во время спора каждый из них будет уверен, что комната принадлежит по праву<strong>именно ему</strong>. Реализация остальных вариантов тоже не принесёт ничего хорошего, и можно с уверенностью сказать, что интересы и репутация отеля пострадают<strong>в любом случае</strong>.</p>
7
<p>Реализация вариантов 2 или 3 может закончиться скандалом между клиентами непосредственно в номере, причём во время спора каждый из них будет уверен, что комната принадлежит по праву<strong>именно ему</strong>. Реализация остальных вариантов тоже не принесёт ничего хорошего, и можно с уверенностью сказать, что интересы и репутация отеля пострадают<strong>в любом случае</strong>.</p>
8
<h2>И при чём здесь Lock-Free?</h2>
8
<h2>И при чём здесь Lock-Free?</h2>
9
<p>Вышеприведённый пример показывает одну из основных<strong>проблем</strong>многопоточных алгоритмов. Она возникает тогда, когда два пользователя одновременно пытаются что-либо изменить в системе. Причина проста - мы имеем дело с<strong>неатомарным процессом</strong>.</p>
9
<p>Вышеприведённый пример показывает одну из основных<strong>проблем</strong>многопоточных алгоритмов. Она возникает тогда, когда два пользователя одновременно пытаются что-либо изменить в системе. Причина проста - мы имеем дело с<strong>неатомарным процессом</strong>.</p>
10
<p>Если бы он был<strong>атомарным</strong>, пользователь смог бы увидеть состояние системы либо до, либо после выполнения операции, но<strong>никак не вовремя её выполнения</strong>, когда менеджер уже начал отдавать номер<strong>Джону</strong>, а в это время сотрудник ресепшена видит, что номер всё еще<strong>свободен</strong>. Для решения этой проблемы<strong>без необходимости использования блокировок используются Lock-Free</strong>алгоритмы. А вот как это происходит на практике мы поговорим в одной из следующих заметок.</p>
10
<p>Если бы он был<strong>атомарным</strong>, пользователь смог бы увидеть состояние системы либо до, либо после выполнения операции, но<strong>никак не вовремя её выполнения</strong>, когда менеджер уже начал отдавать номер<strong>Джону</strong>, а в это время сотрудник ресепшена видит, что номер всё еще<strong>свободен</strong>. Для решения этой проблемы<strong>без необходимости использования блокировок используются Lock-Free</strong>алгоритмы. А вот как это происходит на практике мы поговорим в одной из следующих заметок.</p>
11
<p><em>Следите за новостями и не забывайте оставлять свои комментарии!</em></p>
11
<p><em>Следите за новостями и не забывайте оставлять свои комментарии!</em></p>
12
12