我想確認自己對線程的理解,並通過C++中的引用進行傳遞。以下函數線程安全嗎?使用C++進行線程安全並通過參考傳遞
QString sA = "hello";
QString sB = "world";
bool someFlag = AreStringsEqual(sA,sB);
...
bool AreStringsEqual(QString const &stringA, QString const &stringB)
{
if(stringA == stringB)
{ return true; }
return false;
}
我認爲這是線程安全的。我想,如果有人可以證實我的思維過程,或者告訴我,我不知道我在說什麼:)
有在進程的內存SA和SB的兩個副本。一個是在Thread1的堆棧上創建的,另一個是在Thread2的堆棧上創建的。因爲我們通過引用傳遞,每個線程只需要一組內存中的sA和sB來執行函數調用。
如果我們已經通過值傳遞,在進程內存中每個線程都有兩個線程交換處理器控制的進程內存(每個線程有兩個集合)可能有多達四個sA和sB副本。
這裏沒有共享內存,因此該函數是線程安全的。
很抱歉,如果這個問題是超級簡單,線程都炒了我的大腦:)
的PRI
什麼是QString?它是否實現了「==」運算符?如果是這樣,那麼另一個線程可能會在==運算符的執行過程中更改stringA或stringB,從而可能導致它不是線程安全的。 – user1118321 2012-01-03 06:38:36
我在代碼中看不到線索。是's','sB'和'someFlag'全局變量嗎? – ybungalobill 2012-01-03 06:39:47