К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

1. Атомарные операции

Иногда параллельным потокам необходимо выполнять некоторые несложные действия над общими переменными, исключая совместный доступ к этим переменным. Если в этом случае для синхронизации доступа к переменным использовать критические секции или мьютексы, то может возникнуть такая ситуация, что затраты на синхронизацию потоков значительно превышают затраты на выполнение самих операций. Для решения этой проблемы используются специальные функции, которые выполняют несложные действия над переменными, блокируя при этом доступ к этим переменным со стороны других потоков. Такие функции называются блокирующими функциями (interlocked functions).

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

Атомарная операция обычно включает операцию, выполняющую некоторое действие, и, может быть, операцию сравнения, которая позволяет выполнять это действие при некотором условии. В качестве операций, которые выполняют действия, могут выступать операции замены значения переменной или арифметические операции. Такие операции характеризуют атомарную операцию и используются для ее названия.

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

Заметим, что все блокирующие функции требуют, чтобы адреса переменных были выровнены на границу слова, т. е. были кратны 32. Для такого выравнивания адреса достаточно, чтобы переменная была объявлена в программе со спецификатором типа long, или unsigned long, или одним из их синонимов LONG, ULONG или DWORD.

 

 


Предыдущая        В начало страницы       Следующая
1