рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Volatile

Volatile - раздел Программирование, C# Спецификация языка Если объявле...

Если объявление_поля включает модификатор volatile, поля, введенные этим объявлением, являются полями c модификатором volatile.

Способы оптимизации, переупорядочивающие инструкции, для полей не-volatile могут привести к непредвиденным и непредсказуемым результатам в многопоточных программах, которые обращаются к полям без синхронизации, такой как предоставляемая оператором_блокировки (§8.12). Эти оптимизации могут выполняться компилятором, системой исполняющей среды или оборудованием. Для полей volatile такие переупорядочивающие оптимизации ограничены:

· чтение поля volatile называется чтением volatile. У чтения volatile имеется «семантика захвата», то есть, оно гарантированно выполняется прежде любых обращений к памяти, расположенных после него в последовательности инструкций;

· запись поля volatile называется записью volatile. У записи volatile имеется «семантика освобождения», то есть, оно гарантированно выполняется после всех обращений к памяти, расположенных до инструкции записи в последовательности инструкций.

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

· ссылочный_тип;

· тип byte, sbyte, short, ushort, int, uint, char, float, bool, System.IntPtr или System.UintPtr;

· перечисляемый_тип, имеющий базовый тип перечисления byte, sbyte, short, ushort, int или uint.

Пример

using System;
using System.Threading;

class Test
{
public static int result;
public static volatile bool finished;

static void Thread2() {
result = 143;
finished = true;
}

static void Main() {
finished = false;

// Запуск Thread2() в новом потоке
new Thread(new ThreadStart(Thread2)).Start();

// Дождаться, пока Thread2 не сообщит о наличии result установкой
// finished в true.
for (;;) {
if (finished) {
Console.WriteLine("result = {0}", result);
return;
}
}
}
}

дает на выходе :

result = 143

В этом примере метод Main запускает новый поток, выполняющий метод Thread2. Этот метод сохраняет значение в поле не-volatile с именем result, затем сохраняет true в поле volatile с именем finished. Главный поток дожидается, пока поле finished не будет установлено в true, затем читает поле result. Так как finished объявлено как volatile, главный поток должен прочитать значение 143 из поля result. Если бы поле finished не было объявлено как volatile, то сохранение в result могло быть видимым в главном потоке после сохранения в finished, и главный поток мог прочитать значение 0 из поля result. Объявление finished как поля volatile предотвращает все такие несогласованности.

– Конец работы –

Эта тема принадлежит разделу:

C# Спецификация языка

На сайте allrefs.net читайте: C...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Volatile

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Pragma warning
Директива #pragma warning используется для о

System.ValueType
Все типы значений неявно наслед

Decimal
Тип decimal представляет собой 128-разряд

Break, continue и goto
Состояние определенного присва

Checked и unchecked
Операторы checked и unchecked используются для

From, let, where, join и orderby
Выражение запроса с вторым пред

Groupby
Выражение запроса вида from x in e group v by k п

Foreach
Оператор foreach осуществляет перечиl

Continue
Оператор continue начинает новую итера

Checked и unchecked
Операторы checked и unchecked используются для

Using alias
Директива_using_alias вводит идентификат&

Using namespace
Директива_using_namespace импортирует типы, с&#

Classes
Класс — это структура данных, кото&

Partial.
Модификатор partial используется для

MoveNext
Метод MoveNext объекта перечислителя и

Current
На свойство Current объекта перечисли

Dispose
Метод Dispose используется для очистк

GetEnumerator
Перечислимый объект предоставл

Partial
Модификатор partial указывает, что объ

System.Array
Тип System.Array является абстрактным базо

Partial
Модификатор partial указывает, что дан

System.Enum
Тип System.Enum — это абстрактный базовый к

System.Exception
Класс System.Exception является базовым типом &

AttributeUsage
Атрибут AttributeUsage используется для опи

Conditional
Атрибут Conditional дает возможность ввод

Obsolete
Атрибут Obsolete используется для поме

COM и Win32
Исполняющая среда .NET предоставля&

NETАтрибут IndexerName
Индексаторы реализованы в .NET с пом

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги