Volatile
Volatile - ключевое слово яп С/С++, которое указывает компилятору не оптимизировать эту переменную, так как её значение может меняться извне.
const MAX_COUNT = 4;
size_t count = 0;
if (count > MAX_COUNT)
{
// limit exceeded
}
// count меняем с другого потока
Условие будет всегда истинно, так как компилятор может оптимизировать как-то так:
if (true)
{
// limit exceeded
}
Чтобы такого не происходило - используем volatile (то есть в данном случае говорим компилятору что count может изменяться с другого потока):
volatile size_t count = 0;
либо
size_t volatile count = 0;