2016-02-25 63 views
0

我做的多線程功課,有這樣的模板(它貼一部分,這是我應該改變):如何預定義<atomic>變量?

... 
class MeanCounter : public MeanCounterBase { 
public: 

... 
}; 
... 

我需要使用<atomic>在課堂上預定義了。

我做了什麼:

class MeanCounter : public MeanCounterBase { 
public: 
    std::atomic<unsigned> W; 

    void MeanCounterBase() { 
    W.store(0); 
    } 
private: 
... 
}; 
... 

但它並沒有在所有的工作!程序編譯沒有錯誤。然而在開始的所有線程中W不等於0.我做錯了什麼?

+0

,你能否告訴我們的線程代碼呢? – Sean

+3

請用** [mcve]或[SSCCE(Short,Self Contained,Correct Example)](http://sscce.org)** **你的問題 – NathanOliver

+0

預定義你的意思是什麼?你的意思是:「如何初始化一個原子變量」?無論如何,如果它沒有被初始化,那麼你可能忘了在所有線程中調用'MeanCounter :: MeanCounterBase()'函數? – user2079303

回答

3

你的問題是在這裏:

void MeanCounterBase() { 
    W.store(0); 
    } 

這只是內部MeanCounter類的功能,我懷疑你曾經調用它。你可能想,什麼是構造MeanCounter

MeanCounter() : W(0) { } 
+0

謝謝你的回答,但是你能幫我多一點嗎?我應該在哪裏把這個構造函數放在我的代碼中? 當我試圖把它放在MeanCounterBase中時,我得到錯誤:'MeanCounter :: MeanCounter()'是私有的。 – Acapello

+0

@Acapello,你應該把它放在MeanCounter類。 – SergeyA

+1

@Acapello - 如果您不知道如何編寫構造函數,那麼您就沒有業務編寫多線程代碼。你在你的頭上。 –

0

單向:爲平均計數器實現構造函數,將W設置爲0. 另一種方法:使用默認成員初始值設定項。

1

我想你可能意思是MeanCounter()而不是void MeanCounterBase()來聲明一個初始化原子值的子類構造函數。我對atomic s不是很熟悉,但我認爲你可以在初始化列表中而不是構造函數體中初始化它。