@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/03/18/000-shared-memory-pitfalls-best-practices/#article>
    schema:about <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:mentions <https://comcomponent.com/knowledge/windows-createfilemapping/>, <https://comcomponent.com/knowledge/posix-shm-open/>, <https://comcomponent.com/knowledge/memory-mapped-file/>, <https://comcomponent.com/knowledge/torn-read/>, <https://comcomponent.com/knowledge/spsc-ring-buffer/>, <https://comcomponent.com/knowledge/double-buffering-commit/>, <https://comcomponent.com/knowledge/control-plane-data-plane-separation/>, <https://comcomponent.com/knowledge/shared-memory-header/>, <https://comcomponent.com/knowledge/offset-reference/>, <https://comcomponent.com/knowledge/process-local-resource/>, <https://comcomponent.com/knowledge/shared-memory-abi/>, <https://comcomponent.com/knowledge/initialization-race/>, <https://comcomponent.com/knowledge/creator-joiner-initialization/>, <https://comcomponent.com/knowledge/crash-recovery-design/>, <https://comcomponent.com/knowledge/abandoned-mutex/>, <https://comcomponent.com/knowledge/robust-mutex/>, <https://comcomponent.com/knowledge/false-sharing/>, <https://comcomponent.com/knowledge/shared-memory-namespace-permission/>, <https://comcomponent.com/knowledge/fixed-generation-sizing/>, <https://comcomponent.com/knowledge/remote-machine-sharing/>, <https://comcomponent.com/knowledge/notification-channel-separation/>, <https://comcomponent.com/knowledge/busy-loop-polling/>, <https://comcomponent.com/knowledge/named-pipe/> .

<https://comcomponent.com/knowledge/shared-memory/> a skos:Concept ;
    skos:prefLabel "共有メモリ"@ja ;
    skos:definition "同じ物理ページを複数プロセスの仮想アドレス空間へマップし、同じバイト列を複数プロセスから見せる仕組み。同期そのものではない。"@ja ;
    skos:altLabel "Shared Memory" ;
    skos:altLabel "共有メモリIPC"@ja ;
    ks:requires <https://comcomponent.com/knowledge/shared-memory-abi/> ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/remote-machine-sharing/> .

<https://comcomponent.com/knowledge/windows-createfilemapping/> a skos:Concept ;
    skos:prefLabel "CreateFileMapping/MapViewOfFile"@ja ;
    skos:definition "Windowsで名前付き共有メモリを作成・オープンし、プロセスのアドレス空間にマップするAPIの組み合わせ。pagefile-backedに使うとディスク非連携の共有メモリになる。"@ja ;
    skos:altLabel "CreateFileMappingW" ;
    skos:altLabel "OpenFileMapping" ;
    skos:broader <https://comcomponent.com/knowledge/shared-memory/> ;
    ks:uses <https://comcomponent.com/knowledge/memory-mapped-file/> ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/remote-machine-sharing/> .

<https://comcomponent.com/knowledge/posix-shm-open/> a skos:Concept ;
    skos:prefLabel "shm_open/ftruncate/mmap"@ja ;
    skos:definition "POSIXでshared memory objectを作成・サイズ設定し、プロセスのアドレス空間にマップするAPIの組み合わせ。"@ja ;
    skos:altLabel "POSIX共有メモリAPI"@ja ;
    skos:broader <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/memory-mapped-file/> a skos:Concept ;
    skos:prefLabel "ファイルマッピング(メモリマップトファイル)"@ja ;
    skos:definition "ファイルの内容をプロセスやシステムのアドレス空間にマップする仕組み。ディスク上のファイルに裏打ちされる形と、CreateFileMappingにINVALID_HANDLE_VALUEを渡してページファイルに裏打ちされる形(名前付き共有メモリ)がある。Windowsのキャッシュマネージャー自身の実装基盤でもある。"@ja ;
    skos:altLabel "File Mapping" ;
    skos:altLabel "メモリマップトファイル"@ja .

<https://comcomponent.com/knowledge/torn-read/> a skos:Concept ;
    skos:prefLabel "途中状態の読み取り"@ja ;
    skos:definition "writerがlength・payload・ready flagなど複数フィールドを書き終える前に、readerがその隙間へ入り、新しいフィールドと古いフィールドを組み合わせて読んでしまう現象。"@ja ;
    skos:altLabel "Torn Read" ;
    skos:broader <https://comcomponent.com/knowledge/data-race/> .

<https://comcomponent.com/knowledge/spsc-ring-buffer/> a skos:Concept ;
    skos:prefLabel "SPSCリングバッファ"@ja ;
    skos:definition "producerがwrite_seqの位置へ書き、consumerがread_seqの位置から読む、writerとreaderがそれぞれ1つだけの固定長スロット配列。"@ja ;
    skos:altLabel "single-producer single-consumer ring buffer" .

<https://comcomponent.com/knowledge/double-buffering-commit/> a skos:Concept ;
    skos:prefLabel "ダブルバッファによるcommitプロトコル"@ja ;
    skos:definition "非公開側バッファへ書き、長さやチェックサムを確定したうえでactive buffer indexを切り替え、readerは読み終えたあとにindexが変わっていないか再確認する公開手順。"@ja ;
    skos:altLabel "ダブルバッファ"@ja .

<https://comcomponent.com/knowledge/control-plane-data-plane-separation/> a skos:Concept ;
    skos:prefLabel "control planeとdata planeの分離"@ja ;
    skos:definition "開始・停止・エラーなどの制御はメッセージ系、フレームやバッチなどのデータ本体は共有メモリに置く設計方針。"@ja ;
    skos:altLabel "制御と本体の分離"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/shared-memory-header/> a skos:Concept ;
    skos:prefLabel "共有メモリの固定ヘッダ"@ja ;
    skos:definition "magic・abi_version・state・generation・heartbeatなどを先頭に置き、別物や未初期化・layout差異・初期化途中を検出できるようにする共有メモリのヘッダ設計。"@ja ;
    skos:altLabel "先頭ヘッダ"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/offset-reference/> a skos:Concept ;
    skos:prefLabel "オフセット参照"@ja ;
    skos:definition "共有メモリ内の参照をポインタではなくセグメント先頭からの相対位置(offset)で持ち、各プロセスがbase + offsetで自分のアドレスに直す参照方式。"@ja ;
    skos:altLabel "base + offset" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/process-local-resource/> a skos:Concept ;
    skos:prefLabel "process-localな資源"@ja ;
    skos:definition "生ポインタ、HANDLE、file descriptor、std::string、std::mutexなど、その値がプロセスの文脈にしか意味を持たない資源。"@ja ;
    skos:altLabel "生ポインタ"@ja ;
    skos:altLabel "HANDLE" ;
    skos:altLabel "std::string" ;
    skos:altLabel "std::mutex" ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/shared-memory-abi/> a skos:Concept ;
    skos:prefLabel "共有メモリのABI設計"@ja ;
    skos:definition "型のサイズ、alignment、padding、構造体の並び順など、共有メモリに置くデータが満たすべきバイナリレベルの約束。"@ja ;
    skos:altLabel "共有メモリのバイナリ約束"@ja .

<https://comcomponent.com/knowledge/initialization-race/> a skos:Concept ;
    skos:prefLabel "初期化レース"@ja ;
    skos:definition "作った側が初期化したはずという思い込みのまま、open直後に使う・初期化完了フラグがない・参加者が同時に初期化するなどで共有メモリが壊れる状態。"@ja ;
    skos:altLabel "初期化競合"@ja .

<https://comcomponent.com/knowledge/creator-joiner-initialization/> a skos:Concept ;
    skos:prefLabel "creatorだけが初期化する運用"@ja ;
    skos:definition "共有メモリを作成した側だけが初期化を行い、あとから参加する側はREADY状態になるのを待つ運用ルール。"@ja ;
    skos:altLabel "creator/joinerパターン"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/initialization-race/> .

<https://comcomponent.com/knowledge/crash-recovery-design/> a skos:Concept ;
    skos:prefLabel "クラッシュ復旧設計"@ja ;
    skos:definition "writerが共有データ更新中に落ちた場合に備えて、generation番号・最終commit済みsequence・heartbeat・dirty/cleanフラグ・破損時の全再初期化手順などを用意する設計。"@ja ;
    skos:altLabel "共有メモリの復旧手順"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/abandoned-mutex/> a skos:Concept ;
    skos:prefLabel "abandonedになったmutex(Windows)"@ja ;
    skos:definition "所有スレッドがreleaseせずに終了したためabandonedになったWindowsのmutex。wait側はWAIT_ABANDONEDを受け取り、共有資源が不定状態かもしれないと判断できる。"@ja ;
    skos:altLabel "WAIT_ABANDONED" .

<https://comcomponent.com/knowledge/robust-mutex/> a skos:Concept ;
    skos:prefLabel "robust mutex(POSIX)"@ja ;
    skos:definition "ownerが死んだときEOWNERDEADを返し、修復後にpthread_mutex_consistent()を呼ぶことで再利用できるPOSIXのmutex機構。"@ja ;
    skos:altLabel "EOWNERDEAD" .

<https://comcomponent.com/knowledge/false-sharing/> a skos:Concept ;
    skos:prefLabel "false sharingとキャッシュライン競合"@ja ;
    skos:definition "producerが更新するwrite_indexとconsumerが更新するread_indexなど、更新頻度の高い複数のフィールドが同じキャッシュラインに乗り、CPU間でラインが行き来して遅くなる現象。"@ja ;
    skos:altLabel "False Sharing" .

<https://comcomponent.com/knowledge/shared-memory-namespace-permission/> a skos:Concept ;
    skos:prefLabel "名前空間と権限(Global/Local)"@ja ;
    skos:definition "Windowsの名前付き共有メモリが従う、Global\\/Local\\の名前空間、event・semaphore・mutex等と共有される命名空間、ACL、SeCreateGlobalPrivilegeなどの権限の仕組み。"@ja ;
    skos:altLabel "Global\\ / Local\\" ;
    skos:altLabel "SeCreateGlobalPrivilege" .

<https://comcomponent.com/knowledge/fixed-generation-sizing/> a skos:Concept ;
    skos:prefLabel "世代ごとのサイズ固定運用"@ja ;
    skos:definition "共有メモリのサイズをその世代では不変にし、拡張が必要なら新しいversion/name/generationのsegmentを作って参加者を切り替え、旧segmentを閉じる運用。"@ja ;
    skos:altLabel "resize in placeを避ける"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/remote-machine-sharing/> a skos:Concept ;
    skos:prefLabel "他マシンとの共有"@ja ;
    skos:definition "ネットワーク越しの共有ファイルをマップするなどして、共有メモリの仕組みを別マシンとの間でも使おうとすること。"@ja ;
    skos:altLabel "リモート越しの共有メモリ"@ja .

<https://comcomponent.com/knowledge/notification-channel-separation/> a skos:Concept ;
    skos:prefLabel "通知を別チャネルへ逃がす設計"@ja ;
    skos:definition "readyフラグの共有メモリ上での表現に頼らず、event・semaphore・named pipeなど待てるprimitiveへ完了通知を分離する設計。"@ja ;
    skos:altLabel "待てるprimitiveへの分離"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/busy-loop-polling/> a skos:Concept ;
    skos:prefLabel "busy loopによるポーリング通知"@ja ;
    skos:definition "共有メモリ上のreadyフラグをwhileループで見張り続けて通知を代替する実装パターン。"@ja ;
    skos:altLabel "while(!ready) Sleep(1)" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/shared-memory/> .

<https://comcomponent.com/knowledge/named-pipe/> a skos:Concept ;
    skos:prefLabel "名前付きパイプ"@ja ;
    skos:definition "Windowsのプロセス間通信手段のひとつ。リモートからの利用はアプリ自身のポートではなくSMB(TCP 445)を経由する。"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/windows-createfilemapping/> ;
    schema:description "Windowsでは共有メモリの骨格としてCreateFileMapping/OpenFileMapping/MapViewOfFileを利用する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/posix-shm-open/> ;
    schema:description "POSIXでは共有メモリの骨格としてshm_open/ftruncate/mmapを利用する。"@ja ;
    ks:evidence <https://man7.org/linux/man-pages/man3/shm_open.3.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-createfilemapping/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/memory-mapped-file/> ;
    schema:description "INVALID_HANDLE_VALUEを指定したCreateFileMappingは、ディスク上のファイルではなくページファイルに裏打ちされたfile mapping objectを作り、ファイルマッピングの仕組みを利用する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/torn-read/> ;
    schema:description "同じfile mapping objectから作ったviewは同時点でcoherentだが、それは読者が常に一貫した更新済みレコードを読めることを意味しないため、同期なしで複数フィールドを読むと途中状態を読んでしまうことがある。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/sharing-files-and-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/spsc-ring-buffer/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/torn-read/> ;
    schema:description "データを書き終えてからindexを進めるという順序が、release/acquireのようなメモリバリアで実際に保証されている場合、SPSCリングバッファはreaderが途中状態を読むことを防ぐ。フラグを最後に書くだけではコンパイラやCPUの並べ替えに対して順序が保証されず、防げない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/sharing-files-and-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/double-buffering-commit/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/torn-read/> ;
    schema:description "非公開側で書き終えてからactive indexを切り替える更新がメモリバリアで順序付けられ、かつreaderが読み終えたあとに世代を再確認する場合、ダブルバッファのcommitプロトコルはreaderが途中状態を読むことを防ぐ。順序付けと再確認のどちらを欠いても防げない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/sharing-files-and-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/control-plane-data-plane-separation/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "開始・停止・通知はメッセージ系、データ本体は共有メモリという分離が、共有メモリ設計に対する本記事の推奨である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/sharing-files-and-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory-header/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "magic・abi_version・state・generation・heartbeatを持つ固定ヘッダを先頭に置くことが、共有メモリ設計に対する本記事の推奨である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/offset-reference/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "参照をポインタではなくbase+offsetで持つことが、共有メモリ設計に対する本記事の推奨である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/scope-of-allocated-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/process-local-resource/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "同じmappingを別プロセスでmapしても仮想アドレスは一致するとは限らないため、生ポインタやHANDLEなどprocess-localな資源をそのまま共有メモリに置いても他プロセスでは意味を持たない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/scope-of-allocated-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory-abi/> ;
    schema:description "共有メモリはAPIではなくABI(バイナリインターフェース)の話であり、型サイズ・alignment・padding・構造体の並び順の一致を前提とする。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/initialization-race/> ;
    schema:description "作った側が初期化したはずという思い込みのまま参加者が同時に初期化したりopen直後に使ったりすると、初期化レースが起こることがある。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/creator-joiner-initialization/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/initialization-race/> ;
    schema:description "作成側だけが初期化し、参加側はREADYを待つ運用は、初期化レースを防ぐ。"@ja ;
    ks:evidence <https://man7.org/linux/man-pages/man3/shm_open.3.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/crash-recovery-design/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "generation番号・最終commit済みsequence・heartbeatなどによる復旧手順を用意することが、共有メモリ設計に対する本記事の推奨である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/mutex-objects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/crash-recovery-design/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/abandoned-mutex/> ;
    schema:description "Windowsでは、所有スレッドがreleaseせずに終了するとmutexがabandonedになり、wait側が受け取るWAIT_ABANDONEDを共有資源が不定状態かもしれないという復旧の手がかりに利用できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/mutex-objects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/crash-recovery-design/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/robust-mutex/> ;
    schema:description "POSIXでは、ownerが死んだときEOWNERDEADが返り、修復後にpthread_mutex_consistent()を呼ぶ流れを復旧に利用できる。"@ja ;
    ks:evidence <https://man7.org/linux/man-pages/man3/pthread_mutex_lock.3p.html>, <https://man7.org/linux/man-pages/man3/pthread_mutex_consistent.3.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/false-sharing/> ;
    schema:description "producerとconsumerが更新するカウンタなど、更新頻度の高いフィールドが同じキャッシュラインに乗っていると、false sharingが起きて性能が落ちることがある。"@ja ;
    ks:evidence <https://www.intel.com/content/www/us/en/developer/articles/technical/avoiding-and-identifying-false-sharing-among-threads.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory-namespace-permission/> ;
    schema:description "Windowsの名前付き共有メモリは、Global\\/Local\\の名前空間、ACL、SeCreateGlobalPrivilegeなどの権限で構成される。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/termserv/kernel-object-namespaces>, <https://learn.microsoft.com/ja-jp/windows/win32/memory/file-mapping-security-and-access-rights> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fixed-generation-sizing/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "サイズはその世代では不変にし、拡張が必要なら新しい世代のsegmentへ切り替えることが、共有メモリ設計に対する本記事の推奨である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga>, <https://man7.org/linux/man-pages/man2/mmap.2.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-memory/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/remote-machine-sharing/> ;
    schema:description "共有メモリは基本的に同一ホスト内の仕組みであり、他マシンとの共有には向かない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-createfilemapping/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/remote-machine-sharing/> ;
    schema:description "remote fileに対してはcoherenceが保証されず、2台が同じページをwritableにmapしても互いの書き込みは見えずマージもされない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/notification-channel-separation/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "readyフラグを共有メモリに置くだけでなく、通知はevent・semaphore・named pipeなど待てるprimitiveへ逃がすことが、共有メモリ設計に対する本記事の推奨である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/sharing-files-and-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/busy-loop-polling/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-memory/> ;
    schema:description "共有メモリ上のreadyフラグをbusy loopでポーリングする通知設計は、CPUの浪費や取りこぼしの原因になるため推奨されない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitonaddress> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/notification-channel-separation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/named-pipe/> ;
    schema:description "共有メモリの通知を別チャネルへ逃がす選択肢の1つとして、Windowsのnamed pipeを利用できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/memory/sharing-files-and-memory> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
