Иллюстрированный самоучитель по Architecture .NET

Синхронизация коллекций. Контекст.

Некоторые списки, например TraceListeners, являются безопасными с точки зрения работы с потоками. Во время изменения этой коллекции изменяется копия и устанавливается ссылка на копию. Большинство коллекций, подобных ArrayList (Список массивов), небезопасны при работе с потоками. Но, сделав их автоматически безопасными для работы с потоками, мы уменьшили бы эффективность работы с коллекциями, даже если бы не стоял вопрос о безопасности.

ArrayList (Список массивов) содержит статический метод Synchronization (Синхронизация) для возврата к безопасной, с точки зрения работы с потоками, версии ArrayList (Список массивов). Свойство IsSynchronized позволяет проверить, безопасна ли используемая версия ArrayList (Список массивов) с точки зрения работы с потоками. Свойство SyncRoot возвращает объект, который может использоваться для синхронизации доступа к коллекции. Это позволяет синхронизировать потоки, которые могут использовать ArrayList (Список массивов), с помощью одного и того же объекта.

Контекст

И Чтобы понять, как с помощью атрибутов среда времени выполнения реализует требования организации поточной обработки, мы должны ввести понятие контекста. Шаг 4 из примера Threading (Организация поточной обработки) состоит из того же кода, что и шаг 3, но в выдаче есть дополнительная информация:

Is the customer object a proxy? False
Is the bookings object a proxy? True
Added Boston Presidential Hotel with one room.
Thread 13 Contextld 0 launching threads.
MakeReservation: Thread 28 Contextld 0 starting.
MakeReservation: Thread 29 Contextld 0 starting.
Reserving for Customer 2 at the Boston Presidential Hotel on
12/13/2001 12:00:00
AM for 1 days
Thread 29 Contextld 1 entered Reserve.
Thread 29 finds the room is available in Broker::Reserve
Reserving for Customer 1 at the Boston Presidential Hotel on
12/12/2001 12:00:00
AM for 3 days
Thread 29 Contextld 1 left Reserve.
Thread 28 Contextld 1 entered Reserve.
Thread 28 Contextld 1 left Reserve.
Reservation for Customer 1 could not be booked
Room not available
Reservation for Customer 2 has been booked
Reservationld = 1
ReservationRate = 10000
ReservationCost = 10000
Comment = OK
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.