這篇文章主要講解了“C++為什么盡量不要顯式共享可寫數(shù)據(jù)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++為什么盡量不要顯式共享可寫數(shù)據(jù)”吧!
創(chuàng)新互聯(lián)致力于網(wǎng)站設(shè)計制作、做網(wǎng)站,成都網(wǎng)站設(shè)計,集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
CP.3:盡量不要顯式共享可寫數(shù)據(jù)
Reason(原因)
如果不共享可寫數(shù)據(jù),就不會發(fā)生數(shù)據(jù)競爭。你共享得越少,忘記同步訪問操作(并發(fā)生數(shù)據(jù)競爭)的可能性就越小。你共享得越少,等待鎖釋放的需求就越少(因而可以提高性能)。
Example(示例)
bool validate(const vector&);
Graph temperature_gradiants(const vector&);
Image altitude_map(const vector&);
// ...
void process_readings(const vector& 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();
// ...
}
如果沒有常量修飾符,我們必須檢查函數(shù)的所有的非同步調(diào)用以防止surface_readings發(fā)生潛在的數(shù)據(jù)競爭。在函數(shù)中將suface__readings定義為常量之后可以推斷出其在函數(shù)體內(nèi)部的用法。
Note(注意)
無法修改的數(shù)據(jù)可以安全并高效地分享。不需要加鎖:數(shù)據(jù)競爭無法在常量數(shù)據(jù)上發(fā)生。參照:CP.mess:消息傳遞和CP.31:最好傳值。
感謝各位的閱讀,以上就是“C++為什么盡量不要顯式共享可寫數(shù)據(jù)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C++為什么盡量不要顯式共享可寫數(shù)據(jù)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!