口碑好的网站建设加工外贸网站平台推广
2026/1/11 15:23:35 网站建设 项目流程
口碑好的网站建设加工,外贸网站平台推广,学校门户网站的作用,wordpress角色管理需求#xff1a;A线程会修改T类型的变量x#xff0c;B线程要读取x#xff0c;由于x很大#xff0c;B读取和操作的时候需要加锁#xff0c;这样会占用很长的x的时间。解决办法#xff1a;方法1#xff1a;B线程先加锁拷贝x到x_copy#xff0c;然后锁可以释放#xff0c…需求A线程会修改T类型的变量xB线程要读取x由于x很大B读取和操作的时候需要加锁这样会占用很长的x的时间。解决办法方法1B线程先加锁拷贝x到x_copy然后锁可以释放后面操作x_copy。但是拷贝也是很耗时的std::mutex mtx; T x; // 假设T是需要保护的大对象 // B线程读取逻辑 T x_copy; { std::lock_guardstd::mutex lock(mtx); x_copy x; // 拷贝x到x_copy } // 后续操作x_copy无需加锁方法2不要维护x维护std::shared_ptrconst T x_ptr。然后B线程加锁复制 x_ptr_copy x_ptr 只是创建了shared_ptr新增计数没有发生拷贝然后锁可以释放B线程后续读取x_ptr_copy时读的是旧内容即使此时x_ptr被A线程改变了也不影响B的旧内容。std::mutex mtx; std::shared_ptrconst T x_ptr std::make_sharedT(); // A线程修改逻辑 { std::lock_guardstd::mutex lock(mtx); auto new_ptr std::make_sharedT(*x_ptr); // 深拷贝 // 修改new_ptr指向的对象... x_ptr std::move(new_ptr); // 原子替换 } // B线程读取逻辑 std::shared_ptrconst T x_ptr_copy; { std::lock_guardstd::mutex lock(mtx); x_ptr_copy x_ptr; // 仅增加引用计数 } // 后续操作x_ptr_copy无需加锁注意这里用std::shared_ptrconst T里的const非常重要它保证了x_ptr的对象内容不会改变。想修改x_ptr只能整体替换指针指向对象而不能改变当前指向对象的具体内容。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询