|
|
||
4. Инкремент и декремент переменной |
||
Для изменения значения переменной на единицу в операционных системах Windows используются следующие блокирующие функции: InterlockedIncrement и InterlockedDecrement. Функция Interlockedlncrement имеет следующий прототип: Эта функция предназначена для увеличения значения переменной, адрес которой задан параметром IpAddend, на единицу. Значение, возвращаемое функцией InterlockedIncrement, равно новому значению изменяемой переменной. Функция InterlockedDecrement имеет следующий прототип: Эта функция предназначена для уменьшения значения переменной, адрес которой задан параметром IpAddend, на единицу. Значение, возвращаемое функцией InterlockedDecrement, равно новому значению изменяемой переменной. Замечание: В этих функциях адрес изменяемой переменной, который задается параметром lpTarget, должен быть выровнен на границу слова, т. е. должен быть кратен 32. В листинге 7.3 приведен пример использования функции InterlockedIncrement для взаимоисключающего увеличения значения переменной на 1. Эта программа отличается от программы из листинга 7.1 только тем, что поток producer корректирует значение числа прямо в контейнере, не используя для этого локальную переменную. Листинг 7.3. Пример использования функции interlockedlncrement |
||
#include <windows.h> volatile long n; void producer() void consumer() int main() |
||
|
||
4 |