2013-02-01 11 views

回答

10

你是對的,這些是serialization的兩個不同含義。您熟悉data serialization,它將數據結構轉換爲某些規範表示形式的字節流。在多線程中,術語序列化意味着mutual exclusion對於thread or process synchronization,這意味着一次只有一個線程可以在數據結構上操作。 C++ 11使用std::mutex

#include <mutex> 
std::mutex file_io_mutex; 

{ 
    std::lock_guard<std::mutex> guard(file_io_mutex); 
    std::out << "Only one thread at a time will execute this line." << std::endl; 
} 

這是其中資源被獲取並在同一時間進行初始化,並且當釋放時它超出範圍的Resource Acquisition Is Initialization (RAII)一個例子(執行到達附近提供了用於線程之間的序列化大括號)。這是一個常見的習慣用法,它確保即使代碼在達到塊末尾之前拋出異常,也會釋放互斥鎖。

+1

哇!這可以清楚地回答我的問題。你是偉大的朋友 – pokche

+0

很高興你發現它有幫助! – amdn

7

Serialize實際上意味着以連續的形式發佈,如同一個接一個。因此,線程序列化意味着確保一系列事件發生的順序不是同時發生的

因此,具有序列化線程訪問權限的堆意味着對堆的調用將按照它們的生成順序發生並且實際上不會同時發生。這可能是通過全局鎖定來完成的。

+0

這個。許多編譯器/ CPU通過對指令進行重新排序來優化代碼,以防止延遲,並且L1高速緩存通常是線程/內核特定的。多線程對內存的串行化訪問通常意味着在特定場景中放棄這些優化,其中線程訪問內存的順序對於保持數據完整性至關重要。 –

2

不知道你被告知的具體上下文,我猜它是指開發一個單線程應用程序,通過使用消息隊列模擬多線程系統

這讓我回到過去的日子,當時我玩了CircleMUD派生物。整場比賽是在單線程中實現的,但它必須同時處理50-100個玩家。我很驚訝他們是如何做到的。