WaitForSingleObject Crash

Я пытаюсь защитить часть кода с помощью мьютекса. Из-за сбоя кода ниже я создал простой тестовый код, который делает то же самое. Сбой не обязательно происходит в одной и той же строке кода каждый раз, но всегда происходит вокруг вызовов «WaitForSingleObject» или «Sleep».

Любая помощь будет оценена.

#include <thread>
#include <windows.h>
#include <process.h>

static HANDLE myMutex;

//The function we want to make the thread run.
void task1()
{

WaitForSingleObject(myMutex, INFINITE);

for (int i = 0; i < 20; i++)
{
Sleep(500);
}

ReleaseMutex(myMutex);
}

void task2()
{

Sleep(10);
WaitForSingleObject(myMutex, INFINITE);

for (int i = 0; i < 20; i++)
{
Sleep(10);
}

ReleaseMutex(myMutex);
}

int main(int argc, char **argv)
{

myMutex = CreateMutex(0, FALSE, 0);

std::thread t1(task1);

std::thread t2(task2);
}

0

Решение

Проблема в том, что вы не ожидаете выхода потоков перед тем, как main метод выхода. Деструкторы на thread объекты вызываются без выхода из потока. Вам нужно позвонить join чтобы ваш основной метод ждал. Пытаться:

int main(int argc, char **argv)
{

myMutex = CreateMutex(0, FALSE, 0);

std::thread t1(task1);

std::thread t2(task2);
if(t1.joinable())
t1.join();

if(t2.joinable())
t2.join();

}

В соответствии с std :: поток деструктор документы:

Уничтожает объект потока. Если * это все еще имеет связанный запущенный поток (т.е. joinable () == true), вызывается std :: terminate ().

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]