Неизменные данные и блокировка - PullRequest
1 голос
/ 01 ноября 2011

Есть ли какая-либо причина для обеспечения механизма блокировки (что в противном случае было бы) неизменяемых данных?

Ответы [ 3 ]

5 голосов
/ 01 ноября 2011

Как правило, нет. Одним из основных преимуществ использования неизменяемых данных является то, что вы можете избежать блокировки, поскольку у вас есть неявная гарантия того, что данные являются «текущими» и никто, включая вас, не сможет их изменить.

3 голосов
/ 19 декабря 2011

В некоторых случаях может быть желательно, чтобы интерфейс только для чтения предоставлял метод AcquireReadLock, если для некоторых реализаций этого интерфейса может потребоваться блокировка. Неизменяемый объект, который реализует интерфейс, не обязательно должен был бы что-либо делать в ответ на запрос AcquireReadLock, но он должен был бы обеспечить по крайней мере реализацию-заглушку для этого метода; ожидается, что пользователи метода вызовут AcquireReadLock, прежде чем пытаться выполнить последовательность операций чтения, что может привести к нежелательным результатам, если какой-либо другой поток изменяет объект между ними (обратите внимание, что даже если объект не может быть изменен с использованием интерфейса только для чтения) существование интерфейса только для чтения не означает, что объект не будет видоизменяться другими способами). Кроме того, даже если объекту, не подлежащему изменению, не требуется блокировка, ему все равно может потребоваться опция «имитации» блокировки, чтобы подтвердить, что потребители объекта получают и снимают блокировку должным образом.

1 голос
/ 01 ноября 2011

Нет, если оно действительно полностью неизменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...