
Многопоточность: Примитив синхронизации Semaphore🚦
Семафоры помогают управлять доступом к общему ресурсу нескольким потокам.
Семафор состоит из очереди потоков и значения счетчика.
ℹ️Очередь потоков используется семафором для отслеживания ожидающих потоков в порядке FIFO
ℹ️Значение счетчика используется семафором, чтобы решить, должен ли поток получить доступ к общему ресурсу или нет. Значение счетчика изменяется, когда мы вызываем функцию signal() или wait().
Когда мы должны вызывать функции wait() и signal()?
- Вызов wait() нужен каждый раз перед использованием общего ресурса. По сути, мы спрашиваем семафор, доступен ли общий ресурс или нет. Если нет, будем ждать.
- Вызов signal() нужен каждый раз после использования общего ресурса. По сути, мы сигнализируем семафору, что закончили взаимодействие с общим ресурсом.
🚧 НИКОГДА не запускайте функцию семафора wait() в основном потоке, так как это приведет к зависанию вашего приложения.
Семафоры помогают управлять доступом к общему ресурсу нескольким потокам.
Семафор состоит из очереди потоков и значения счетчика.
ℹ️Очередь потоков используется семафором для отслеживания ожидающих потоков в порядке FIFO
ℹ️Значение счетчика используется семафором, чтобы решить, должен ли поток получить доступ к общему ресурсу или нет. Значение счетчика изменяется, когда мы вызываем функцию signal() или wait().
Когда мы должны вызывать функции wait() и signal()?
- Вызов wait() нужен каждый раз перед использованием общего ресурса. По сути, мы спрашиваем семафор, доступен ли общий ресурс или нет. Если нет, будем ждать.
- Вызов signal() нужен каждый раз после использования общего ресурса. По сути, мы сигнализируем семафору, что закончили взаимодействие с общим ресурсом.
🚧 НИКОГДА не запускайте функцию семафора wait() в основном потоке, так как это приведет к зависанию вашего приложения.