当前位置: 首页 > news >正文

2022腾讯云网站建设方案书建设网站 深圳

2022腾讯云网站建设方案书,建设网站 深圳,高邮企业网站建设公司哪家便宜,wordpress设置图标如果可能#xff0c;避免错误共享 当在不同处理器上运行的多个并发任务写入位于同一高速缓存行上的变量时#xff0c;会发生错误共享。 当一个任务写入一个变量时#xff0c;这两个变量的缓存行将会失效。 每当缓存行失效时#xff0c;每个处理器必须重新加载缓存行。 因此…如果可能避免错误共享 当在不同处理器上运行的多个并发任务写入位于同一高速缓存行上的变量时会发生错误共享。 当一个任务写入一个变量时这两个变量的缓存行将会失效。 每当缓存行失效时每个处理器必须重新加载缓存行。 因此错误共享会导致应用程序中的性能降低。 以下基本示例介绍了两个并发任务每个任务都增加了共享的计数器变量。 volatile long count 0L; concurrency::parallel_invoke([count] {for(int i 0; i 100000000; i)InterlockedIncrement(count);},[count] {for(int i 0; i 100000000; i)InterlockedIncrement(count);} ); 若要消除两个任务间的数据共享可修改该示例以使用两个计数器变量。 任务完成后此示例将计算最终的计数器值。 但此示例还说明了错误共享因为变量 count1 和 count2 可能位于同一缓存行。 long count1 0L; long count2 0L; concurrency::parallel_invoke([count1] {for(int i 0; i 100000000; i)count1;},[count2] {for(int i 0; i 100000000; i)count2;} ); long count count1 count2; 消除错误共享的一种方法是确保计数器变量位于不同的缓存行。 下面的示例将对齐 64 字节边界上的 count1 和 count2 变量。  __declspec(align(64)) long count1 0L; __declspec(align(64)) long count2 0L; concurrency::parallel_invoke([count1] {for(int i 0; i 100000000; i)count1;},[count2] {for(int i 0; i 100000000; i)count2;} ); long count count1 count2; 此示例假定内存缓存的大小为 64 个或更少的字节。 当必须在任务之间共享数据时我们建议使用 concurrency::combinable 类。 combinable 类以不太可能发生错误共享的方式创建线程本地变量。 确保变量在任务的整个生存期内有效 如果向任务组或并行算法提供 Lambda 表达式capture 子句将指定 Lambda 表达式的主体是否通过值或引用访问封闭范围中的变量。 通过引用将变量传递到 Lambda 表达式时必须保证该变量的生存期在任务完成之前一直保持。 请看下面的示例该示例定义了 object 类和 perform_action 函数。 perform_action 函数创建 object 变量并在该变量中以异步方式执行某项操作。 由于不能保证在 perform_action 函数返回前完成任务因此如果 object 变量在任务运行时被销毁则程序将崩溃或发生未指定的行为。 // lambda-lifetime.cpp // compile with: /c /EHsc #include ppl.husing namespace concurrency;// A type that performs an action. class object { public:void action() const{// TODO: Details omitted for brevity.} };// Performs an action asynchronously. void perform_action(task_group tasks) {// Create an object variable and perform some action on // that variable asynchronously.object obj;tasks.run([obj] {obj.action();});// NOTE: The object variable is destroyed here. The program// will crash or exhibit unspecified behavior if the task// is still running when this function returns. } 具体取决于应用程序的要求可使用以下方法之一来保证变量在每项任务的整个生存期保持有效。 下面的示例通过值将 object 变量传入任务。 因此任务可在自己的变量副本上进行操作。 // Performs an action asynchronously. void perform_action(task_group tasks) {// Create an object variable and perform some action on // that variable asynchronously.object obj;tasks.run([obj] {obj.action();}); } 由于 object 变量通过值进行传递因此此变量发生的任何状态更改不会出现在原始副本。 以下示例使用 concurrency::task_group::wait 方法确保在 perform_action 函数返回以前完成任务。 // Performs an action. void perform_action(task_group tasks) {// Create an object variable and perform some action on // that variable.object obj;tasks.run([obj] {obj.action();});// Wait for the task to finish. tasks.wait(); } 由于函数返回前任务现在完成了因此perform_action 函数不再以异步方式进行。 下面的示例修改 perform_action 函数以获取对 object 变量的引用。 调用方必须保证 object 变量的生存期在任务完成前是有效的。 // Performs an action asynchronously. void perform_action(object obj, task_group tasks) {// Perform some action on the object variable.tasks.run([obj] {obj.action();}); } 也可使用指针来控制传入任务组或并行算法的对象的生存期。
http://www.w-s-a.com/news/611295/

相关文章:

  • 宁波网站建设计品牌推广策略分析
  • 网站自建设需要买什么时候开始深圳市建筑市场信息公开平台
  • 平台营销型网站建设小城镇建设的网站文献
  • 燕郊个人做网站小企业网站模板
  • 网站ip需要备案新开河街做网站公司
  • 网站定制设计方案wordpress批量传图片
  • 做外贸兼职的网站设计福州网站开发私人
  • 金华建站模板目前国内有哪些网站做家具回收
  • 个人做网站还是公众号赚钱好部门网站建设和维护
  • 系列图标设计网站推荐建商城网站
  • 中牟建设工程信息网站黑龙江 哈尔滨
  • 网站设计基本结构wap自助建论坛网站
  • 专业番禺网站建设爱做网站外国
  • 深圳罗湖网站设计公司价格制作网站的公司办什么营业执照
  • 长清网站建设价格群辉NAS搭建wordpress
  • 变更股东怎样在工商网站做公示网站建设和网站优化哪个更重要
  • 西安手机网站python网站开发效率
  • 深圳建站的公司羽毛球赛事2022直播
  • j2ee网站开发搜索推广的流程
  • 网站目录结构图虚拟主机如何安装WordPress
  • 信产部网站备案保定软件开发网站制作
  • 东莞网站设计定做东莞网站建设最牛
  • 网站开发的软件天猫的网站导航怎么做的
  • 做链接哪个网站好网站建设平台方案设计
  • 资质升级业绩备案在哪个网站做网站建设方案费用预算
  • 做网站找哪个平台好wordpress 3.9 性能
  • 大兴模版网站建设公司企业网站备案案例
  • h5建站是什么wordpress客户端 接口
  • 济南自适应网站建设制作软件下载
  • 望都网站建设抖音广告投放收费标准