温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++为什么尽量不要显式共享可写数据

发布时间:2021-11-25 16:11:10 来源:亿速云 阅读:128 作者:iii 栏目:大数据

这篇文章主要讲解了“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++为什么尽量不要显式共享可写数据这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI