использование msclr / lock в нескольких потоках - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть глобальное логическое значение, которое записывается двумя разными потоками.

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;
        }
    }
}
...