1

ブーストを始めたばかりです。私のコードがミューテックスをうまく使用しているかどうかを尋ねたいと思います。それをテストするために、1 から n までの数値の合計を数えるコードを書きました。それを数える愚かな方法ですが、私は n 個のスレッドを使用しました...ミューテックスを試すためだけに...

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

#define NUMBER 10

boost::mutex mutex;
unsigned long long sum = 0;

class counter
{
public:
    counter() : count(0) { }

    unsigned long long increment() 
    {
        return ++count;
    }

private:
     unsigned long long count;
};

counter c;

void count()
{
    boost::mutex::scoped_lock scoped_lock(mutex);
    unsigned long long i = c.increment();
    sum += i;
    std::cout << "i=" << i << "\tsum=" << sum << std::endl;
}

int main(int, char*[])
{
    boost::thread_group thrds;
    for (int i=0; i < NUMBER; ++i)
    {
        thrds.create_thread(&count);
    }
    thrds.join_all();

    system("pause");
    return 0;
}

結果は良さそうですが、ミューテックスなしでは見栄えが悪いので、正しく使用したと思いますが、すべてが問題ないかどうかを尋ねたいだけです。アドバイスありがとうございます。私や他の人に役立つことを願っています。

4

1 に答える 1

0

私はグローバル変数を使用しませんが、良さそうに見えますが、それはあなたの例ではありません...

cout を他の場所で使用する場合もロックする必要があります。これは、2 つのスレッドが同時に作業している場合に意味をなさない可能性があるためです。

于 2013-06-05T08:40:30.173 に答える