Имена этой функции кажутся сложными. Когда точно известно, что это путь, а не делать что-то вроде этого:
Подготовка
CRITICAL_SECTION cs;
int * p = malloc (sizeof (int)); // Сайт размещения
InitializeCriticalSection (& CS); // СОВЕТ для первой записи
Тема # 1
{
* р = 1; // Первая запись
}
Тема № 2
{
EnterCriticalSection (& CS);
* р = 2; // Вторая запись
LeaveCriticalSection (& CS);
}
У меня есть запись, которая выполняется в один поток:
Run()
{
// some code
m_bIsTerminated = TRUE;
// some more code
}
Затем у меня есть чтение, которое выполняется в другом потоке (возможно, одновременно):
Terminate()
{
// some code
if( m_bIsTerminated )
{
m_dwThreadId = 0;
m_hThread = NULL;
m_evExit.SetEvent();
return;
}
// even more code
}
Как лучше всего решить эту проблему? Являются ли критические разделы подходящими или использование InterlockedExchangeAdd () более полезным?