[Chromium]如何安全的使用PostTask
PostTask引數決策樹
如何傳遞繫結的物件
官方的解釋總是最權威,有疑問看這裡或者直接看程式碼中的說明: bind_helpers.h.
傳值方式 | 描述 |
---|---|
this 或 物件指標 | 如果物件本身是一個RefCountedThreadSafe, 沒有問題. 如果是個裸指標,應當儘量避免,除非你可以保證它的執行緒安全. |
base::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.)
還可以參考: 謹慎使用智慧指標.
參考
相關文章
- 從“快穩省安全”看Chromium——Chromium學習系列
- Chromium gclient使用GCclient
- Chromium團隊的安全開發核心準則
- Chromium 提示:缺少 Google API 金鑰,因此 Chromium 的部分功能將無法使用GoAPI
- Chromium Trace and Perfetto使用詳解
- Chromium計劃將HTTP標記為不安全HTTP
- PHP 如何安全的使用 MySQL ?PHPMySql
- postTask:React的殺手鐗被瀏覽器原生實現了?React瀏覽器
- 如何安全使用加密套件?加密套件
- Mac M1(arm 系列晶片)如何安裝 Chromium | PuppeteerMac晶片
- 提升安全性:微軟為Chromium Edge推出除蟲賞金專案微軟
- Chromium Canvas工作流Canvas
- Chromium VIZ工作流
- GitHub 如何基於 Node.js 和 Chromium 開發 Atom?GithubNode.js
- Chromium 或將一統瀏覽器核心?微軟也投奔 Chromium 懷抱瀏覽器微軟
- 微軟在Chromium Edge瀏覽器中新新增“阻止不安全內容”功能微軟瀏覽器
- iOS如何安全而又優雅的使用NSTimeriOS
- Scrapy+Chromium+代理+selenium
- Chromium VIZ架構詳解架構
- 如何正確安全使用伺服器?伺服器
- 如何使用semanage管理SELinux安全策略Linux
- Chromium Command Buffer原理解析
- 解決root使用者不能開啟Chromium網頁瀏覽器網頁瀏覽器
- 個人使用者如何保證工作時使用企業郵箱的安全?
- 教你如何同時執行經典版和Chromium版Edge瀏覽器瀏覽器
- 如何使用Vault安全的儲存密碼和API金鑰密碼API
- 如何配置使用 HTTP 嚴格傳輸安全(HSTS)HTTP
- Chromium 新的彈窗機制以及 HTML 的 <dialog> 元素HTML
- 安全團隊如何加強終端使用者的意識
- 如何安全的儲存使用者密碼?(中)程式碼篇密碼
- 如何安全的儲存使用者密碼?(中)理論篇密碼
- 如何封裝安全的go封裝Go
- 管控內部威脅,資料如何安全使用?
- 微軟Chromium版Edge安裝程式洩露微軟
- Chromium CC渲染層工作流詳解
- Linux-chromium(谷歌) install flash playerLinux谷歌
- 修改原始碼,自定義chromium啟動頁原始碼
- Chromium Embedded Framework中文文件 (SVN屬性)Framework