В информатике задачи читателей—писателей связаны с ситуациями, когда множество параллельных потоков выполнения пытаются получить доступ к одному и тому же общему ресурсу одновременно.
Блокировка чтения—записи — это примитив синхронизации, который решает одну из этих проблем. Он обеспечивает одновременный доступ для операций только для чтения, в то время как для операций записи требуется монопольный доступ. Это означает, что несколько потоков могут читать данные параллельно, но для записи или изменения данных требуется исключительная блокировка.
В Symfony 5.2 добавили для них поддержку благодаря общим блокировкам. Когда хранилище блокировок реализует новый SharedLockStoreInterface
, вы можете вызвать метод acquaRead()
, чтобы получить блокировку только для чтения, в то время как существующий метод acquire()
получает блокировку записи:
$lock = $factory->createLock('user'.$user->id);
if ($lock->acquireRead()) {
// ...
}