Chromium中多執行緒及併發技術要點(C/C++)
類別 | 類 | 說明 | 示例 | |
---|---|---|---|---|
執行緒機制 | Thread | (參考:執行緒模型及應用指南) | ||
MessagePump | ||||
MessageQueue | ||||
SequencedWorkerPool | 它是一個執行緒池,用於執行需要序列執行的任務請求,這些請求依據不同的Token分組,只在相同組內保證執行順序。 這樣多個組可以並行執行,而單個組則是序列執行。比如:不同例項所對應的分組不同,或者不同的功能對應不同的分組。 它同時允許指定當退出時未執行的任務如何處理,包括:繼續執行,忽略,阻止退出。 | |||
併發控制機制 | volatile | 語言基於處理器提供的特性。保證各個執行緒讀資料時為最新的值。但它的使用需要掌握一定的技巧。 | ||
Atomic32 (base/atomicops.h) AtomicSequenceNumber (base/atomic_sequence_num.h) AtomicRefCountXxx (base/atomic_ref_count.h) | Chromium提供的原子資料型別。 | |||
AutoLock AutoUnlock Lock (base/synchronization/lock.h) | 非常接近於Java的Synchronized。Lock和AutoLock很好理解。AutoUnlock的行為 與AutoLock相似,建構時release lock, 在析構時acquire lock. *應用了RAII idiom。 | cookie_manager.cc *AutoUnlock的示例: media/filters/audio_renderer_impl.h | ||
WaitableEvent (base/synchronization/waitable_event.h) | 以非同步的呼叫完成操作,在呼叫端以一個WaitableEvent等待任務完成. 基於Lock + ConditionVariable實現。 | |||
ConditionVariable (base/synchronization/condition_variable.h) | 條件變數的C/C++實現。主要方法: Wait TimeWait BroadCast Singal | InProcessCommandBuffer | ||
CancellationFlag (base/synchronization/cancellation_flag.h) | 基於原子操作,提供一個布林值標誌的設定和查詢。 | |||
WTF提供的機制 | atomicXXX (wtf/Atomics.h) | WebKit提供的原子類 | ||
Mutex (wtf/TreadingPrimitives.h) | 互斥量的實現 (對平臺化的抽象) 和base中的Lock系列相似。 | Mutex m_mutex; { ...... } | ||
MutexLock (wtf/TreadingPrimitives.h) | ||||
RecursiveMutex (wtf/TreadingPrimitives.h) | ||||
MutexTryLocker (wtf/TreadingPrimitives.h) | ||||
ThreadCondition (wtf/TreadingPrimitives.h) | 條件變數的實現 | |||
併發容器 | ThreadLocalBoolean ThreadLocalPointer (base/threading/thread_local.h) | TLS (Thread Local Stoage) 的實現 | 在ThreadRestrictions中有ThreadLocal的應用: LazyInstance<ThreadLocalBoolean>::Leaky g_io_disallowed = LAZY_INSTANCE_INITIALIZER; | |
ThreadSafeDataTransport (wtf/ThreadSafeDataTransport.h) | 以執行緒安全的方式在一對生產者和消費者之間利用SharedBuffer傳遞資料。減少執行緒衝突和資料拷貝。 | ImageFrameGenerator.h 更多的說明 | ||
LazyInstance | 函式中靜態成員初始化不是執行緒安全的,容易出現隱患 (C++11已經聲稱可以保證)。可以使用base::LazyInstance()來解決, 同時LazyInstance可以避免記憶體碎片,因為它的物件都是在資料段建立的。 | |||
工具類 | NonThreadSafe | 只在Debug下有效。提供非執行緒安全物件的保護機制。即建立及使用在同一執行緒上。 主要方法: CalledOnValidThread() | RefCountedBase在最新 Chromium分支也是繼承自NonThreadSafe。 | |
ThreadCollisionWarner (base/threading/thread_collision_warner.h) | 提供一組巨集,用於幫助保證類的執行緒安全。這個源於執行緒問題預防的機制,在編碼層面防止執行緒問題。細節參考: "Threading mess"。 主要提供的機制包括:
| |||
ThreadChecker (base/threading/thread_checker.h) | 對一個非執行緒安全的類,為了確保它的例項不會被跨執行緒進行操作,就可以使用一個ThreadChecker成員變數來進行保證。 *只在Debug模式下生效。 | |||
ThreadRestrictions (base/threading/thread_restrictions.h) | 為每個執行緒增加限制條件。如不允許阻塞I/O, 是否允許單例物件等。 以單例為例,它會在base::Singleton::get()檢查。 而IO的檢查,則在各個IO處理的函式中檢查,如LoadNativeLibrary(), SysInfo::AmountOfFreeDiskSpace(), OpenFile()等。 |
| ||
WatchDog (base/threading/watchdog.h) | 用於監測某個執行緒在指定時間沒有響應的情況。主要方法Arm()及Disarm()。 | 在UMA中: class ShutdownWatchDogThread : public base::Watchdog { …... } |
*C++11 thread尚未使用。
相關文章
- 多執行緒與併發-----Lock鎖技術執行緒
- 阿里面試官的分享Java面試中需要準備哪些多執行緒併發的技術要點阿里面試Java執行緒
- VC多執行緒 C++ 多執行緒執行緒C++
- C++ 多執行緒C++執行緒
- c++多執行緒C++執行緒
- 【併發技術01】傳統執行緒技術中建立執行緒的兩種方式執行緒
- 多執行緒併發執行及解決方法執行緒
- C#多執行緒同步技術C#執行緒
- Java多執行緒/併發08、中斷執行緒 interrupt()Java執行緒
- 【C++併發實戰】(二)執行緒管理C++執行緒
- C++ Builder 多執行緒程式設計技術經驗談C++UI執行緒程式設計
- 【java 多執行緒】多執行緒併發同步問題及解決方法Java執行緒
- 【併發技術02】傳統執行緒技術中的定時器技術執行緒定時器
- JAVA多執行緒併發Java執行緒
- C++使用Boost多執行緒C++執行緒
- C++多執行緒學習C++執行緒
- 多執行緒C++更新MYSQL執行緒C++MySql
- C++多執行緒:atomicC++執行緒
- 【併發技術04】執行緒技術之死鎖問題執行緒
- 【併發技術03】傳統執行緒互斥技術—synchronized執行緒synchronized
- 多執行緒併發篇——如何停止執行緒執行緒
- IOS 多執行緒技術iOS執行緒
- 程式設計思想之多執行緒與多程式(4):C++ 中的多執行緒程式設計執行緒C++
- 多執行緒與高併發(一)多執行緒入門執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- java 多執行緒 併發 面試Java執行緒面試
- 要點提煉|開發藝術之執行緒執行緒
- C++多執行緒基礎教程C++執行緒
- Java 併發和多執行緒(一) Java併發性和多執行緒介紹[轉]Java執行緒
- C#中的執行緒(三)多執行緒C#執行緒
- 一文看懂JUC多執行緒及高併發執行緒
- 多執行緒併發同步問題及解決方案執行緒
- java中多執行緒併發的處理方式Java執行緒
- 關於Java併發多執行緒的一點思考Java執行緒
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- Java併發技術05:傳統執行緒同步通訊技術Java執行緒
- Java多執行緒程式設計要點Java執行緒程式設計