Введение
В информатике, задачи читателей-писателей являются примерами распространенной вычислительной проблемы, связанной с конкурентным доступом. Существует как минимум три варианта этих задач, которые рассматривают ситуации, когда множество параллельных потоков выполнения пытаются одновременно получить доступ к одному и тому же общему ресурсу. Некоторые потоки могут читать, а другие – записывать, при этом действует ограничение, что ни один поток не должен получать доступ к общему ресурсу для чтения или записи, пока другой поток выполняет запись. (В частности, необходимо предотвратить одновременное изменение общего ресурса несколькими потоками и разрешить одновременный доступ к общему ресурсу двум или более читающим потокам). Блокировка читателей-писателей – это структура данных, которая решает одну или несколько задач читателей-писателей. Базовая задача читателей-писателей была впервые сформулирована и решена Куртуа и соавторами.
In computer science, the readers–writers problems are examples of a common computing problem in concurrency. There are at least three variations of the problems, which deal with situations in which many concurrent threads of execution try to access the same shared resource at one time. Some threads may read and some may write, with the constraint that no thread may access the shared resource for either reading or writing while another thread is in the act of writing to it. (In particular, we want to prevent more than one thread modifying the shared resource simultaneously and allow for two or more readers to access the shared resource at the same time). A readers–writer lock is a data structure that solves one or more of the readers–writers problems. The basic reader–writers problem was first formulated and solved by Courtois et al.
Простейшая проблема читателя-писателя
Простейшая задача читатель-писатель, использующая только два семафора и не требующая массива читателей для чтения данных из буфера. Обратите внимание, что данное решение упрощается по сравнению с общим случаем, поскольку оно эквивалентно задаче об ограниченном буфере, и, следовательно, допускается параллельный вход только читателей, число которых ограничено размером буфера.
Алгоритм
Читатель будет ожидать писателя из-за семафора чтения. Писатель прекратит запись, когда семафор записи достигнет 0. Читатель прекратит чтение, когда семафор чтения достигнет 0. В процессе записи значение семафора записи передается семафору чтения, а в процессе чтения значение семафора чтения передается семафору записи по завершении цикла.