Простой mrews.

Есть несколько путей осуществления примитива MREWS. В VCL содержится довольно сложная реализация. Для того, чтобы познакомиться с основными принципами, здесь приведена более простая, но несколько менее функциональная реализация с использованием семафоров. Простой MREWS содержит следующие элементы:

  • Критическая секция для ограничения доступа к разделяемым данным (DataLock).
  • Целый счетчик числа активных потоков чтения (ActRead).
  • Целый счетчик числа читающих потоков (ReadRead).
  • Целый счетчик числа активных потоков записи (ActWrite).
  • Целый счетчик числа записывающих потоков (WriteWrite).
  • Два семафора, называемые Reader (читатель) и Writer (писатель) (ReaderSem и WriterSem).
  • Критическая секция для осуществления полного исключения записи (WriteLock).

Чтение и запись можно описать так:

Чтение или запись проводится в два этапа. Сначала идет активная стадия, когда поток указывает, что он намерен читать или писать. Когда это происходит, поток может быть заблокирован, в зависимости от того, не идет ли уже процесс другого чтения или записи. Когда он разблокируется, то переходит ко второй стадии, выполняет операции чтения или записи, затем освобождает ресурс, устанавливая в соответствующие значения счетчики активных, читающих или записывающих потоков. Если этот поток — последний активный поток чтения или записи, он разблокирует все потоки, которые прежде были заблокированы в результате тех действий, которые он выполнял (чтение или запись). Следующая диаграмма иллюстрирует это более подробно.

К этому моменту реализация такого вида синхронизатора должна быть уже очевидна. Вот она

Простой искусственный интеллект на Python. Распознавание голоса на Python


Читать еще…

Понравилась статья? Поделиться с друзьями: