C++ форсирующий поток и мьютекс

Я только начал на повышение. Я хотел бы спросить, хорошо ли мой код использует мьютекс. Чтобы проверить это, я написал код, который считает сумму чисел от 1 до 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;
}

Результаты выглядят хорошо и без мьютекса выглядят плохо, поэтому я думаю, что использовал их правильно, но просто хочу спросить, все ли в порядке. Спасибо за любой совет; Я надеюсь, что это будет полезно для меня и других.

1 ответ

Решение

Выглядит хорошо, хотя я бы не использовал глобальные переменные, но дело не в вашем примере...

Вам также следует заблокировать cout, если вы используете его где-то еще, потому что это может привести к бессмысленному результату, если над ним одновременно работают два потока.

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