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,你也应该锁定它,因为如果两个线程同时在它上面工作,那会产生真正的废话。

于 2013-06-05T08:40:30.173 回答