2011-01-11 3 views
1

Noob вопрос:Использование Win32 Event Objects

Эта ссылка показывает пример CreateEvent и CreateThread

http://msdn.microsoft.com/en-us/library/ms686915(v=vs.85).aspx

Мой вопрос, если ThreadProc действительно Потокобезопасная?

В частности, переменная dwWaitResult. Поскольку все потоки ждут на одном и том же событии, оказывается, что этот код работает, но были созданы разные события, например, это не сработает правильно?

ответ

3

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

+0

«поэтому все локальные переменные специфичны для отдельного потока». Верно ли, что, поскольку переменная является локальной и нестатической, каждый вызывающий объект (поток) имеет отдельный экземпляр переменной dwWaitResult? – Eric

+0

@ Эрик М, Да. Если переменная была помечена как статическая функция, то она будет использоваться для всех экземпляров. –

0

Событие создается по имени, поэтому, если событие уже создано, оно повторно используется в любом другом потоке, «создающем» событие с тем же именем. В результате код примера является безопасным потоком.

Смежные вопросы