Синхронизация в контексте многопоточности предотвращает состояние гонки (race condition) и обеспечивает согласованный доступ к общим ресурсам (переменным, файлам, сетевым соединениям) из разных потоков.
Основные механизмы синхронизации:
- Mutex (мьютекс): Взаимное исключение. Только один поток может владеть мьютексом и получать доступ к защищенному ресурсу.
- Semaphore (семафор): Ограничивает количество потоков, которые могут одновременно получать доступ к ресурсу. Работает со счетчиком.
- Lock (блокировка): Обобщенное понятие, часто используемое для обозначения мьютексов или других механизмов, полностью блокирующих доступ.
- Dispatch Queue (очередь выполнения): В Grand Central Dispatch (GCD) очереди могут быть последовательными (serial) или параллельными (concurrent), обеспечивая синхронизацию путем управления порядком и количеством одновременно выполняющихся задач. Sequential очереди гарантируют выполнение задач по одной, что inherently обеспечивает синхронизацию для данных, доступ к которым осуществляется только из задач этой очереди.
Принцип работы: Поток, желающий получить доступ к общему ресурсу, сначала пытается получить блокировку
Синхронизация в контексте многопоточности предотвращает состояние гонки (race condition) и обеспечивает согласованный доступ к общим ресурсам (переменным, файлам, сетевым соединениям) из разных потоков.
Основные механизмы синхронизации:
- Mutex (мьютекс): Взаимное исключение. Только один поток может владеть мьютексом и получать доступ к защищенному ресурсу.
- Semaphore (семафор): Ограничивает количество потоков, которые могут одновременно получать доступ к ресурсу. Работает со счетчиком.
- Lock (блокировка): Обобщенное понятие, часто используемое для обозначения мьютексов или других механизмов, полностью блокирующих доступ.
- Dispatch Queue (очередь выполнения): В Grand Central Dispatch (GCD) очереди могут быть последовательными (serial) или параллельными (concurrent), обеспечивая синхронизацию путем управления порядком и количеством одновременно выполняющихся задач. Sequential очереди гарантируют выполнение задач по одной, что inherently обеспечивает синхронизацию для данных, доступ к которым осуществляется только из задач этой очереди.
Принцип работы: Поток, желающий получить доступ к общему ресурсу, сначала пытается получить блокировку