DON'T STOP AND CODE
92 subscribers
41 photos
1 video
1 file
109 links
Мой путь в программировании
#python

Для связи: @avagners
Download Telegram
[Алгоритм Питерсона*: Обеспечение взаимного исключения в многопоточности]

Привет, друзья! Помните пост "Важность контроля доступа к разделяемым объектам", где была продемонстрирована проблема при работе с параллельными потоками? Сегодня расскажу об интересном алгоритме для обеспечения взаимного исключения — алгоритме Питерсона. Это простое, но важное решение, которое позволяет двум потокам безопасно разделять ресурсы.

Что такое алгоритм Питерсона?
Алгоритм Питерсона — это классический способ синхронизации двух потоков, обеспечивающий их корректное взаимодействие при совместном доступе к общим данным. Он был предложен Гарри Питерсоном в 1981 году и стал одним из первых алгоритмов, которые решили проблему взаимного исключения без использования сложных синхронизирующих механизмов.

Как это работает?
Алгоритм Питерсона позволяет двум потокам координировать доступ к общим ресурсам. В нашем примере используется класс PetersonLock, который реализует этот алгоритм. Два потока (производитель и потребитель) используют блокировки для безопасной записи и чтения данных из общего буфера.

class PetersonLock:
def __init__(self):
self.flag: List[bool, bool] = [False, False]
self.favored_thread: int = 0

def lock(self, thread_id):
other_thread = 1 - thread_id
self.flag[thread_id] = True
self.favored_thread = thread_id

while self.flag[other_thread] and self.favored_thread == thread_id:
pass

def unlock(self, thread_id):
self.flag[thread_id] = False


В этом коде два потока устанавливают свои флаги и координируют доступ к ресурсу через переменную favored_thread, обеспечивая таким образом взаимное исключение.

Зачем это нужно?
Хотя алгоритм Питерсона редко используется на практике в современных системах, он остаётся важным учебным примером, который помогает понять основные концепции синхронизации и взаимного исключения. Его простота делает его отличным инструментом для изучения основ многопоточного программирования.

Кто такой Питерсон?

Гарри Питерсон — американский учёный, который внёс значительный вклад в области информатики, особенно в разработку методов синхронизации и управления параллельными процессами. Его алгоритм стал основой для многих учебных курсов и учебников по операционным системам.

———
Далее я покажу другой алгоритм взаимного исключения для N-потоков - алгоритм Лэмпорта.

*В других русскоязычных источниках фамилию пишут через "е" - Петерсон.

Полный пример кода по ссылке: https://github.com/avagners/algorithms_and_data_structures/blob/main/algorithms/asynchronous_concurrent_execution/peterson_lock/peterson_lock_2.py

#Python #Concurrency #PetersonsAlgorithm #Многопоточность #Синхронизация #IT