C++shared_ptr和unique_ptr区别解析

unique_ptr和shared_ptr...这两个东西...在2 02 2 年...我想不通...实际上...区别相当大。

unique_ptr...它...独特...真的独特...就像买房子...你一个人吗...无法复制...不能说... unique_ptr ptr1 = new int(1 0);...然后说... unique_ptr ptr2 = ptr1 ;...直接编译...搬家不好...我只会抱怨因为它被卖了... std::move... unique_ptr ptr2 = std::move(ptr1 );... 这样... ptr1 变成空指针... 不再... 它强调... 资源在我手中... 不要碰它... 例如... 你写一个工厂函数... 创建一个对象... make_unique ();... 最后调用所有者的责任.... 删除... 不... unique_ptr 会自动为你删除它... 避免内存泄漏... 它是私有的... 简单...
shared_ptr... 它是... 共享... 被许多人使用...公共厕所就像...人们使用它...它是开放的...有一个跟踪...跟踪谁在跟踪...当计数器变为0...没有人使用它...然后删除它...例如...p_trptr = 1 ...shared...make_shared(2 0);...shared_ptr ptr2 = ptr1 ;...这两个指针...指向同一个int...计数器2 ...您更改ptr1 ...因为ptr2 也合并...它避免在一个中删除地方...在一个地方使用它...通过引用使用它...使程序崩溃...但是...例如...它有一个设备...有一个漏洞...shared_ptr...B类...也有一个shared_ptr成员。
这样他们就互相指向了...计数器永远不会是0...它不会被删除...内存泄漏...解决方案...weak_ptr使用...weak_ptr 不计数器增量...就像它不接触...struct B {weak_ptr a_ptr; }。
销毁...需要更新计数器...需要原子操作...更多时间...和大量内存...需要一个控制块来存储计数器...存储指针...所以...使用unique_ptr...高性能...使用shared_ptr...更多内存...使用...慢...需要清理它...
总结...私有...想要使用...共享...但要小心使用unique_ptr...我需要...shared_ptr...循环引用...如果这不起作用...内存泄漏...使用weak_ptr...解决... unique_ptr...没有这样的问题...很简单...我明白...

Java多线程编程:如何协调子线程并安全地共享数据?

记得有一次,一个项目需要处理大量上传的图片。
每张上传的图片都需要被压缩然后存储在服务器上。
为了提高效率,我们决定使用多线程来处理这些任务。
当时,我们是这样工作的:主线程负责接收上传请求,并为每个图像压缩请求分配一个子线程。
每个子线程处理完自己的任务后,将压缩图像文件路径返回给主线程。

但是,在处理过程中,我注意到如果子线程正在处理图像时主线程有新请求,则新请求可能会分配给仍在处理的子线程,从而导致数据冲突。
为了避免这种情况,我们使用CountDownLatch来协调子线程的执行。
主线程将初始化一个等于子线程数量的计数器。
每个子线程完成其任务后,将调用 countDown() 来递减计数器。
当计数器达到零时,主线程的 wait() 方法解除阻塞并继续处理新请求。

这种方法简单有效,但后来我想,如果子线程要处理的图像数据量非常大,那么使用CountDownLatch可能不是最高效的选择。
那么有没有更有效的方法来处理这种情况呢?