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

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

0 ответов

Другие вопросы по тегам