2
, почему эта программа дает ошибку seg. Я попытался выяснить проблему с помощью gdb, но не повезло.Почему эта небольшая многопоточная программа C++ 11, дающая ошибку сегментации
#include <iostream>
#include <condition_variable>
#include <thread>
#include <chrono>
using namespace std;
condition_variable cv;
mutex cv_m;
mutex m;
int count = 0;
#define COUNT_DONE 10
#define COUNT_HALT1 3
#define COUNT_HALT2 6
void functionCount1()
{
for(;;)
{
m.lock();
count++;
cout << "Counter value functioncount1: " << count << endl;
m.unlock();
if(count >= COUNT_DONE)
return;
}
}
void functionCount2()
{
for(;;)
{
m.lock();
count++;
cout << "Counter value functionCount2: " << count << endl;
m.unlock();
if(count >= COUNT_DONE) return;
}
}
int main()
{
thread t1(functionCount1), t2(functionCount2);
t1.join();
t2.join();
return 0;
}
Если отладчик не помогает, то вам нужно добавить протоколирования сообщений, прежде всего знать, где выдаёт ошибку сегментации происходит. –
Ваша программа имеет неопределенное поведение: доступ к 'count' вне мьютекса - это гонка данных. [С исправленным UB] (http://coliru.stacked-crooked.com/a/d7aeb98c985d5d27 «Живой код в Coliru»), кажется, все в порядке. – Casey
Пожалуйста, используйте классы блокировки для блокировки мьютексов, а не исключающих небезопасные функции-члены. См. Эту статью для справки: http://www.stroustrup.com/C++11FAQ.html#std-lock – Andrzej