|
|
||
2. Замена значения переменной |
||
Для замены значения переменной в операционных системах Windows используется блокирующая функция InterlоckedЕхchange, которая имеет следующий прототип: Эта функция предназначена для замены значения переменной, адрес которой задан параметром lpTarget, на новое значение, которое задано параметром lValue. Значение, возвращаемое функцией InterlockedExchange, равно старому значению изменяемой переменной. Замечание: Адрес lpTarget, который указывает на изменяемую переменную, должен быть выровнен на границу слова, т. е. должен быть кратен 32. В листинге 7.1 приведен пример использования функции InterlockedExchange для взаимоисключающей замены значения переменной. В этой программе поток producer производит товары — целые числа, а поток consumer потребляет эти товары. После того как товар произведен, он помещается потоком producer в контейнер, роль которого выполняет переменная n. Чтобы потребить товар, поток consumer должен забрать его из контейнера. Требуется, чтобы операции загрузки нового товара в контейнер и извлечение товара из контейнера не прерывали друг друга. Для выполнения этого требования в программе и используется функция InterlockedExchange. Листинг 7.1. Пример использования функции InteriockedExchange |
||
| #include <windows.h> #include <iostream.h> volatile long n; void producer() void consumer() int main() |
||
|
||
2 |