Вопрос сводится к тому, как вы определяете «ресурс».В вашем примере есть один объект X, из которого два потока читают и пишут.Если бы для объекта X был только один тип блокировки, то поток 2 не смог бы получить его при чтении, без тупика.
Аналогично, если блокировка требуется только для записи (поэтому нет гарантииповторяющиеся чтения), тогда запись потока 2 будет просто записью записи потока 1.Опять же, без тупиков.
Но в вашем примере есть два вида блокировок для одного объекта.«Ресурс» здесь - это блокировка, и их две: блокируемая блокировка чтения и эксклюзивная блокировка записи.
Вот почему рекомендуется заранее получать блокировки.Если оба потока попытались получить блокировку записи (только один «ресурс») вместо того, чтобы сначала получить блокировку чтения, а затем перевести ее в блокировку записи, то не будет никакого спора.