PostTask參数决策树怎样传递绑定的对象官方的解释总是最权威。有疑问看这里或者直接看代码中的说明:?bind_helpers.h. 传值方式描写叙述this或对象指针假设对象本身是一个RefCountedThreadSafe,没有问题.假设是个裸指针,应当尽量避免,除非你能够保证它的线程安全."/>

[Chromium]怎样安全的使用PostTask

Posted zhchoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Chromium]怎样安全的使用PostTask相关的知识,希望对你有一定的参考价值。

PostTask參数决策树

技术分享图片



怎样传递绑定的对象

官方的解释总是最权威。有疑问看这里或者直接看代码中的说明:?bind_helpers.h. 

传值方式描写叙述
this 或 对象指针

假设对象本身是一个RefCountedThreadSafe, 没有问题.

假设是个裸指针,应当尽量避免,除非你能够保证它的线程安全.

base::Unretained

注意:使用这个的前提是有其他同步机制保障对象的生命周期.

  1. 假设有其他同步机制保障对象的生命周期。能够使用Unretained()传递非引用计数的对象.
  2. 假设是一个非引用计数的对象,能够使用Unretained()封装起来.
base::Owned

假设是暂时对象,或者操心任务运行完毕后对象可能出现泄露,能够使用Owned, 表示由Task

持有对象的全部权,在结束时析构它.

base::Passed假设要运行Task须要传入scoped指针,就能够使用它转换,它也能够避免拷贝,而是相似move语义.
base::ConstRef相似常量引用,不希望bind过程出现拷贝,就能够使用它.
base::IgnoreResult假设Task要调用的方法带有返回值。而你又不关心返回值就能够使用IgnoreResult来传入对象指针.

?

讨论:为什么要避免引用计数?

假设这样一直将以引用计数来使用对象岂不最为简单。为什么要避免引用计数?

Chromium智能指针指引中的解释:

  • Reference-counted objects make it difficult to understand ownership and destruction order, especially when multiple threads are involved. There is almost always another way to design your object hierarchy to avoid refcounting. Avoiding refcounting in multithreaded situations is usually easier if you restrict each class to operating on just one thread, and use PostTask() and the like to proxy calls to the correct thread. base::Bind(), WeakPtr, and other tools make it possible to automatically cancel calls to such an object when it dies. Note that too much of our existing code uses refcounting, so just because you see existing code doing it does not mean it‘s the right solution. (Bonus points if you‘re able to clean up such cases.)

还能够參考:?慎重使用智能指针

參考

关于Callback和Bind对对象全部权更完整的解释



以上是关于[Chromium]怎样安全的使用PostTask的主要内容,如果未能解决你的问题,请参考以下文章

怎样改ie浏览器添加supcan.xpi

360浏览器一按F12就会调试 怎样禁止掉呢?

ERR_UNSAFE_PORT , Chromium 的默认非安全端口

ERR_UNSAFE_PORT , Chromium 的默认非安全端口

每日安全资讯SQLite 被曝存在漏洞 所有 Chromium 浏览器受影响

Chromium for mac(谷歌网页浏览器)