Здраствуйте, как правильно поставить критическую секцию в такой функции?
DWORD WINAPI Set1(LPVOID){
EnterCriticalSection (&cs) ;
for (int i=0; i<amount; i++){
if (Flowers[i]==2 ){
Flowers[i]=1;
cout << "Set1 ";
cout << endl;
}
}
LeaveCriticalSection (&cs);
ExitThread(0);
return 0;
}
Правильно — за пределами цикла.
DWORD WINAPI Set1(LPVOID)
{
EnterCriticalSection (&cs);
for (int i = 0; i < amount; i++)
{
if (Flowers[i] == 2)
{
Flowers[i] = 1;
std::cout << "Set1 " << endl;
}
}
LeaveCriticalSection (&cs);
ExitThread(0);
return 0;
}
Освобождение секции внутри цикла чревато минимум двумя вещами:
Если в массиве не окажется ни одного элемента, равного двум, критическая секция не будет освобождена.
А если в массиве будет больше одного такого элемента, критическая секция будет высвобождена больше раз, чем вы её захватили.
И да, зачем вам нужен return 0;
после ExitThread(0);
? Вторая функция и так обеспечивает безусловный выход из потока.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Работаю над проектом с компилятором MinGW32, компилирую в cmdexe и столкнулся с проблемой: Создал header-файл(UIClass
В задаче на вход программе дается количество невыполненных заданий и время, которого не хватает на решение этих заданий
Доброго времени сутокКакие потоки можно назвать фоновыми? Потоки с меньшим приоритетом можно назвать фоновыми относительно потока с большим...