Ошибка EXC_BAD_ACCESS? Повышение многопоточности / исключения Mutex

Кажется, мне трудно понять, что не так с моим кодом ниже. Программа работает правильно, но на линии

startCounter.join();

Моя программа, кажется, аварийно завершает работу с кодом ошибки EXC_BAD_ACCESS (код = 13, адрес = 0x0). Я использую XCode.

Все до этой строки работает правильно; программа выводит значение n каждую секунду, так как другой поток увеличивает значение до бесконечности. Что я делаю неправильно?

#include <iostream>
#include <boost/thread.hpp>

boost::mutex mtx;

class Worker
{
public:
Worker(int n);
void increment();
void printValue();
private:
int n;
};

int main()
{
Worker test(5);

boost::thread startCounter(boost::bind(&Worker::increment, &test));
std::cout << "Increment Thread Started..." << std::endl;

boost::thread startPrinter(boost::bind(&Worker::printValue, &test));
std::cout << "Print Thread Started..." << std::endl;

startPrinter.join();
startCounter.join();

std::cout << "Program Complete." << std::endl;

return EXIT_SUCCESS;
}

Worker::Worker(int n) : n(n)
{
std::cout << "Initial Value: " << n << std::endl;
}

void Worker::increment()
{
for (int i = 0; i < 60000000; i++) {
boost::lock_guard<boost::mutex> lock(mtx);
n = i;
}

std::cout << "Increment Thread Finished. Final Value: " << n << "." << std::endl;
}

void Worker::printValue()
{
for (int i = 0; i < 10; i++) {
{
boost::lock_guard<boost::mutex> lock(mtx);
std::cout << "Current value: " << n << std::endl;
}
boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
}

std::cout << "Print Thread Finished." << std::endl;
}

Большое спасибо!

2

Решение

Задача ещё не решена.

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

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

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