У меня есть глобальное логическое значение, которое записывается двумя разными потоками.
bool someBoolean = false;
void thread_1()
{
for (;enablethread_1;Sleep(100))
{
if (someBoolean == true)
{
//do something
someBoolean = false;
}
}
}
void thread_2()
{
for (;enablethread_2;Sleep(100))
{
if (someCondition)
{
someBoolean = true;
}
}
}
Мне сказали, что из-за записи в двух разных потоках это может привести к неопределенному поведению / гонке данных (?). Как я могу предотвратить это? Это в проекте clr, поэтому я обнаружил использование mslcr / lock.h вместо блокировки мьютекса.
Я не был уверен, что это что-то делает для меня, поместив блокировку в коде пустым.
#include <msclr/lock.h>
bool someBoolean = false;
void thread_1()
{
msclr::lock l(); //lock here
for (;enablethread_1;Sleep(100))
{
if (someBoolean == true)
{
//do something
someBoolean = false;
}
}
}
void thread_2()
{
msclr::lock l(); //lock here
for (;enablethread_2;Sleep(100))
{
if (someCondition)
{
someBoolean = true;
}
}
}