Новое в Symfony 5.2: Общие блокировки

В информатике задачи читателей—писателей связаны с ситуациями, когда множество параллельных потоков выполнения пытаются получить доступ к одному и тому же общему ресурсу одновременно.

Блокировка чтения—записи — это примитив синхронизации, который решает одну из этих проблем. Он обеспечивает одновременный доступ для операций только для чтения, в то время как для операций записи требуется монопольный доступ. Это означает, что несколько потоков могут читать данные параллельно, но для записи или изменения данных требуется исключительная блокировка.

В Symfony 5.2 добавили для них поддержку благодаря общим блокировкам. Когда хранилище блокировок реализует новый SharedLockStoreInterface, вы можете вызвать метод acquaRead(), чтобы получить блокировку только для чтения, в то время как существующий метод acquire() получает блокировку записи:

$lock = $factory->createLock('user'.$user->id);
if ($lock->acquireRead()) {
    // ...
}