2013-06-05 116 views
1

我剛開始提升。我想問我的代碼是否使用互斥鎖。 爲了測試它,我編寫了計算1到n的數字之和的代碼。傻的方法來計算,但我用n個線程...只是嘗試互斥...C++提升線程和互斥體

#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; 
} 

結果看起來不錯,並沒有互斥很糟糕,所以我想我正確地使用它,只是想問問,如果一切都好。 感謝您的任何建議;我希望這會對我和其他人有所幫助。

+6

這應該繼續codereview。 –

回答

0

看起來不錯,但我不會用全局變量,但是這不是你的例子是關於什麼的...

你也應該鎖定COUT如果你使用它,因爲其他地方可如果兩個產生真正的無感線程正在同時處理它。