オブジェクトのシリアル化とディスクへの保存方法については知っていますが、スレッドのシリアル化とは実際には何を意味するのでしょうか? 誰かがこれについて私を助けて、正しい方向に向けてください。
3 に答える
これらが の 2 つの異なる意味であることは正しいですserialization
。データ構造を正規表現のバイト ストリームに変換するデータ シリアライゼーションに精通しています。マルチスレッドでは、シリアライゼーションという用語は、スレッドまたはプロセス同期の相互排除を意味します。これは、一度に 1 つのスレッドのみがデータ構造に対して操作できることを意味します。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)の例であり、リソースの取得と初期化が同時に行われ、リソースが範囲外になると解放されます (実行が右中括弧に達する)。これは一般的な慣用句で、ブロックの最後に到達する前にコードが例外をスローした場合でも、mutex が確実に解放されるようにします。
シリアライズとは、実際には、次々と、シリアル形式で公開することを意味します。したがって、スレッドシリアライゼーションとは、特定の一連のイベントが同時にではなく順番に発生することを確認することを意味します
したがって、シリアル化されたスレッド アクセスを持つヒープは、ヒープへの呼び出しが作成された順序で発生し、実際には同時に発生しないことを意味します。これは、おそらくグローバル ロックによって行われます。
あなたがこれを言われた特定のコンテキストを知らなくても、メッセージ キューを使用してマルチスレッド システムをシミュレートするシングル スレッド アプリケーションの開発を指していると思います。
これは、CircleMUD派生物をプレイした昔のことを思い起こさせます。ゲーム全体は 1 つのスレッドで実装されましたが、50 ~ 100 人のプレイヤーを同時に処理する必要がありました。彼らがそれをどのように達成したかには非常に驚かされました。