C++怎么在线程之间传递少量数据

本篇内容主要讲解“C++怎么在线程之间传递少量数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么在线程之间传递少量数据”吧!

CP.31:在线程之间以传值方式传递少量数据,而不是传递引用或指针

Reason(原因)

以拷贝形式提供的少量数据的复制和访问成本会低于使用某种锁定机制的共享。拷贝操作天然保证所有权的唯一性(简化代码),避免可能出现的数据竞争。

Note(注意)

Defining "small amount" precisely is impossible.

不可能确切定义什么是“少量”。

Example(示例)

string modify1(string);
void modify2(string&);

void fct(string& s)
{
   auto res = async(modify1, s);
   async(modify2, s);
}

调用modify1的过程包含两次拷贝string的值;调用modify2的过程就不会。另一方面,(多任务环境下,译者注)modify1的实现和单线程代码完全相同,而modify2会需要某种形式的互斥锁以避免数据竞争。如果是短string(比如说10个字符),调用modify1的过程会出奇地快,基本上就是线程切换的成本。如果是长string(例如1,000,000个字符),拷贝两次可能不是一个好主意。

注意参数处理过程没有为异步操作做任何事。这个判断同样适用于考虑使用消息还是共享内存的情况。

到此,相信大家对“C++怎么在线程之间传递少量数据”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!