Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Синхронизация программных потоков в среде .NET. Атомарные (Interlocked-) операции. Volatile-переменные. Барьеры памяти (Memory Barrier).

Читайте также:
  1. III. Группа вспомогательных инструментов для содействия в выполнении основного этапа операции.
  2. Oslash;Фирмы-олигополисты могут создавать искусственные барьеры для вхождения новых фирм в отрасль:приобретя патент на изобретение
  3. V2:Профилактика девиантного поведения в молодежной среде. Социально-педагогическая работа с неформальными молодежными группами и объединениями
  4. Анализ денежных потоков.
  5. Аристотель об обучении и памяти
  6. Архитектура ПК. Центральные и периферийные устройства, средства ввода и средства вывода данных. Оперативная память и средства внешней памяти. Характеристики процессора.
  7. Асинхронные операции в среде .NET. Асинхронный вызов делегатов.
  8. Б) Модификация с дисконтированием ожидаемых денежных потоков
  9. Барьеры общения
  10. Барьеры общения

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

Класс Interlocked выполняет следующие операции.

В платформе.NET Framework версии 2.0 метод Add добавляет к переменной целочисленное значение и возвращает новое значение переменной.

В платформе.NET Framework версии 2.0, метод Read считывает 64-разрядное целочисленное значение в ходе атомарной операции. Это полезно в 32-разрядных операционных системах, где считывание 64-разрядного целого числа обычно не является атомарной операцией.

Методы Increment и Decrement увеличивают или уменьшают переменную и возвращают результирующее значение.

Метод Exchange выполняет атомарный обмен значений для указанной переменной, возвращая текущее значение и заменяя его новым значением. Универсальная перегружаемая версия этого метода в платформе.NET Framework версии 2.0 может использоваться для обмена значений в переменной любого ссылочного типа.

Метод CompareExchange также обменивает два значения, но делает это в зависимости от результата сравнения. Универсальная перегружаемая версия этого метода в платформе.NET Framework версии 2.0 может использоваться для обмена значений в переменной любого ссылочного типа.

Современные процессоры часто позволяют реализовать методы класса Interlocked одной инструкцией. Поэтому они обеспечивают очень высокую производительность синхронизации и позволяют построить механизмы синхронизации более высокого уровня, такие как спин-блокировка.

 

Ключевое слово volatile указывает, что поле может быть изменено несколькими потоками, выполняющимися одновременно. Поля, объявленные как volatile, не проходят оптимизацию компилятором, которая предусматривает доступ посредством отдельного потока. Это гарантирует наличие наиболее актуального значения в поле в любое время.

Как правило, модификатор volatile используется для поля, обращение к которому выполняется через несколько потоков без использования оператора lock для сериализации доступа.

 

Существует несколько видов барьеров памяти: полный, release fence и accure fence.

Полный барьер гарантирует, что все чтения и записи расположенные до/после барьера будут выполнены так же до/после барьера, то есть никакая инструкция обращения к памяти не может перепрыгнуть барьер.

Accure fence гарантирует что инструкции, стоящие после барьера, не будут перемещены в позицию до барьера.

Release fence гарантирует, что инструкции, стоящие до барьера, не будут перемещены в позицию после барьера.

Еще пару слов о терминологии. Термин volatile write означает выполнение записи в память в сочетании с созданием release fence. Термин volatile read означает чтение памяти в сочетании с созданием accure fence.

 

.NET предоставляет следующие методы работы с барьерами памяти:

- метод Thread.MemoryBarrier() создает полный барьер памяти

- ключевое слово volatile превращает каждую операцию над переменной, помеченной этим словом в volatile write или volatile read соответсвенно.

- метод Thread.VolatileRead() выполняет volatile read

- метод Thread.VolatileWrite() выполняет volatile write

 




Дата добавления: 2015-01-30; просмотров: 29 | Поможем написать вашу работу | Нарушение авторских прав

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | <== 19 ==> | 20 | 21 | 22 | 23 | 24 | 25 |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав