многопоточность — ускорение потока 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, если вы используете его где-то еще, потому что это может привести к бессмысленному результату, если над ним одновременно работают два потока.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]