這篇文章主要講解了“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<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();
// ...
}
如果沒有常量修飾符,我們必須檢查函數(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ù)這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
名稱欄目:C++為什么盡量不要顯式共享可寫數(shù)據(jù)
網(wǎng)站地址:http://jinyejixie.com/article24/igodce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站設(shè)計公司、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)站內(nèi)鏈、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)