您好,登录后才能下订单哦!
这篇文章主要讲解了“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。