2

以下のコードの何が問題になっているのか理解するのに苦労しているようです。プログラムは正しく実行されますが、

startCounter.join();

私のプログラムは、エラーコードEXC_BAD_ACCESS(code = 13、address = 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;
}

どうもありがとう!

4

0 に答える 0