Книга: Системное программирование в среде Windows

Локальная и глобальная память

Локальная и глобальная память

Суть другого требования, предъявляемого к корректному многопоточному коду, состоит в том, что глобальная память не должна использоваться для локальных целей. Так, применение функции ThFunc, приводившейся ранее в качестве примера, будет необходимым и уместным в тех случаях, когда поток должен располагать собственным экземпляром N. N может быть использовано для хранения временных результатов или размещения аргумента функции. Если же N размещается в глобальной памяти, то все процессы будут разделять единственный экземпляр N, что может стать причиной некорректного поведения программы, как бы тщательно вы ни планировали синхронизацию доступа к этой переменной. Ниже приводится пример подобного некорректного использования N. N должно быть локальной переменной, размещаемой в стеке функции потока.

DWORD N;
DWORD WINAPI ThFunc (TH_ARGS pArgs) {
 …
 N = 2 * pArgs->Count; …
}

Оглавление книги


Генерация: 2.384. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз