您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++為什么盡量不要顯式共享可寫數據”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++為什么盡量不要顯式共享可寫數據”吧!
CP.3:盡量不要顯式共享可寫數據
Reason(原因)
如果不共享可寫數據,就不會發生數據競爭。你共享得越少,忘記同步訪問操作(并發生數據競爭)的可能性就越小。你共享得越少,等待鎖釋放的需求就越少(因而可以提高性能)。
Example(示例)
bool validate(const vector<Reading>&);
Graph<Temp_node> temperature_gradiants(const vector<Reading>&);
Image altitude_map(const vector<Reading>&);
// ...
void process_readings(const vector<Reading>& surface_readings)
{
auto h2 = async([&] { if (!validate(surface_readings)) throw Invalid_data{}; });
auto h3 = async([&] { return temperature_gradiants(surface_readings); });
auto h4 = async([&] { return altitude_map(surface_readings); });
// ...
h2.get();
auto v2 = h3.get();
auto v3 = h4.get();
// ...
}
如果沒有常量修飾符,我們必須檢查函數的所有的非同步調用以防止surface_readings發生潛在的數據競爭。在函數中將suface__readings定義為常量之后可以推斷出其在函數體內部的用法。
Note(注意)
無法修改的數據可以安全并高效地分享。不需要加鎖:數據競爭無法在常量數據上發生。參照:CP.mess:消息傳遞和CP.31:最好傳值。
感謝各位的閱讀,以上就是“C++為什么盡量不要顯式共享可寫數據”的內容了,經過本文的學習后,相信大家對C++為什么盡量不要顯式共享可寫數據這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。