2017-02-25 13 views
-2

說我有一個叫做喵的變量。喵等於25.說我也有兩個函數異步運行。在某些時候,這兩個函數都需要訪問meow變量中的值,並通過將它加3來改變它。但是,這裏有個問題,如果其中一個異步函數在喵喵聲中執行這個更新過程,那麼另一個應該等到它完成。在某種意義上,必須有一個隊列來訪問/更改meow變量。根據編程語言meta,C++如何最經常地完成這項工作?如何將排隊添加到變量的讀取和更新?

+1

「根據編程語言meta」 - 這是什麼? –

+0

對不起,如果這不清楚,即時通訊只是問什麼是「goto」方法來做到這一點在C + + VS應該存在一個更古老的解決方案。 – slimshady

+0

那麼,這仍然不清楚,但看看http://en.cppreference.com/w/cpp/thread –

回答

0

你有兩個主要選擇:原子和互斥。如果您只增加一個共享變量,並且不關心增量發生的順序,則可以使用原子變量。

有關完整信息,請參閱the documentation for std::atomic。以下顯示瞭如何增加三個原子變量myatom

myatom.fetch_add(3); 

注意fetch_add操作返回前值,所以如果myatom調用fetch_add之前是0,則該函數返回0和myatom將被設置爲3

atomic<>模板也會重載算術運算符,但我更願意使用成員函數來更清楚地說明操作正在處理一個原子變量。使查找問題更容易。