Поведение TMultiReadExclusiveWriteSynchronizer при продвижении блокировки чтения блокировку записи

Поле может быть присвоено или классу или экземпляру класса. Полями по умолчанию переменные экземпляра. При помощи static поле становится переменной класса, таким образом существует один и только один clock. При создании изменений в одном месте это видимо везде. Экземпляр varables изменяется друг независимо от друга.

5
задан jpfollenius 28 July 2009 в 05:48
поделиться

3 ответа

Во-первых: ваш код из EndWrite находится в TSimpleRWSync, который является облегченной реализацией IReadWriteSync, тогда как TMultiReadExclusiveWriteSynchronizer намного сложнее.

Во-вторых: вызов LeaveCriticalSection (FLock) в EndWrite выполняет не снимайте блокировку, если все еще есть открытые вызовы EnterCriticalSection (FLock) (например, в BeginRead).

Это означает, что ваш пример кода вполне допустим и должен работать должным образом, если вы используете экземпляр TSimpleRWSync или Экземпляр TMultiReadExclusiveWriteSynchronizer.

4
ответ дан 18 December 2019 в 14:49
поделиться

У меня нет Delphi 2009, но я полагаю, что не было никаких изменений в способе работы TMultiReadExclusiveWriteSynchronizer. Я думаю, что это правильная структура для вашего сценария с одним замечанием: «BeginWrite» - это функция, возвращающая логическое значение. Убедитесь, что вы проверили результат перед выполнением операций записи.

Кроме того, в Delphi 2006 класс TMultiReadExclusiveWriteSynchronizer содержит множество комментариев разработчика, а также некоторый код отладки. Обязательно ознакомьтесь с реализацией перед ее использованием.

См. Также: Работа с TMultiReadExclusiveWriteSynchronizer на EDN

3
ответ дан 18 December 2019 в 14:49
поделиться

Благодаря ответам Уве Раабе и Тихауана:

TMultiReadExclusiveWriteSynchronizer отлично работает с такими вложенными блокирующими структурами. EndWrite не освобождает блокировку чтения повторно, поэтому можно легко преобразовать блокировку чтения в блокировку записи на определенный период времени, а затем вернуться к блокировке чтения без вмешательства других авторов.

0
ответ дан 18 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: