Linuxで共有メモリを複数プロセスで読み書きする場合について質問させて頂きます。
CPUは32ビットで、共有メモリ上の、int(32ビット)の領域を
複数のプロセスで読み書きする場合を想定した場合、
セマフォ等でロックした方が良いのでしょうか?
または、CPUが1命令で読み書きすることが可能
(と思っていますが、違っていればご指摘お願い致します)なので、
セマフォ等のロックをかけなくても、問題はないものなのでしょうか?
割りと良くありそうな疑問だと思ったのですが、
ウェブで調べた限りでは該当する質問はありませんでしたので、
質問させて頂きました。
ご回答宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
>ご回答頂いた内容で、「書き込み」と「更新」の違いが良く解りませんでした。
「読み出してその値を加工して書き込む」 つまり、「 a=a+b 」のような操作を「更新」と書きました。
この場合は実際には読み出し、演算、書き込みの3つの命令が実行されます。
読み出しと書き込みの間で、他のプロセスが書けないようにロックします。
No1の参考に書いたURLのページを見てください。
a=100 のようにaの値を読み出さずに、値と無関係に書き込むだけなら、ロックの必要は無いです。
同時に動く別プロセスが読み出す値は、100かもしれないし、100を書き込む前の値が50だったとすると50かもしれない。ただ、かならずどちらかで、それ以外の変な値になることはありません。
ご回答ありがとうございます。
単純に1命令で読み出し、または書き込みを行うのであれば、ロックは不要ということですね。
ありがとうございました。
No.2
- 回答日時:
共有メモリに書くデータに、サンプル番号を付けて、
・データを書く
・そのデータに対応するサンプル番号を書く
という処理を書いて、参照側はサンプル番号が付いているものは、
データも書けていると判定して、ロックフリーにしたことがありますねぇ。
No.1
- 回答日時:
読み書きだけならロック無しで問題ありません。
ただ、読み書きだけってほとんど無意味でしょう。
内容を更新するなら、更新の前後にロックとロック解除が必要です。
参考: http://codezine.jp/article/detail/7564
この回答への補足
早速のご回答ありがとうございます。
ご回答頂いた内容で、「書き込み」と「更新」の違いが
良く解りませんでした。
説明不足だったとすれば申し訳ありません。
ある1つの共有メモリ上のint(32ビット)の領域に対して、
プロセスAが書き込み,プロセスBが読み込みを
セマフォ無しで同時に実行した場合、
プロセスBは、プロセスAの中途半端な書き込み途中のデータを
参照してしまうことはないのでしょうか?
というのが質問の真意です。
CPUはマルチコアを想定しています。
以上宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- CPU・メモリ・マザーボード CPUがメモリ上の命令を実行する流れについての質問です。 3 2023/05/05 01:41
- CPU・メモリ・マザーボード CPUがメモリ上の命令を実行した後の流れについての質問です。 1 2023/05/05 01:36
- システム CPUの問題について 2 2022/07/09 12:04
- ノートパソコン 予算は5万円ぐらいで ノートパソコン 選び 9 2023/01/15 10:13
- CPU・メモリ・マザーボード CPUがメモリ上に書かれている命令を実行した後の流れについての質問です。 1 2023/05/05 01:18
- 不動産業・賃貸業 賃貸契約契約の解除 1 2022/11/07 18:02
- CPU・メモリ・マザーボード AG03mk2使用時にデバイスが認識されなくなる【B550 phantom gaming 4】 2 2023/02/11 05:21
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- 教えて!goo 他のユーザーの回答は読むべきでしょうか。 5 2023/01/13 14:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
PL/SQLでのTO_DATEの時間取得に...
-
変数名の取得
-
シーケンサで最小値を保持する
-
textboxとLabelを動的に変更する
-
OpenCVにおいてのYCrCb値の求め方
-
VB初心者。小数点以下の表示で...
-
変数に代入してある数値を表示...
-
Excel VBAのリストボックスの値...
-
ハッシュテーブル(連想配列)が...
-
範囲が指定されている乱数について
-
VBAのIF分で値を入れる場合
-
Webbrowser.innerHTMLの「oncha...
-
ASPの変数の値をJAVA Script内...
-
vb6のVSFlexGridで選択行、列の...
-
[VBA]選択範囲の下から上に処理...
-
Excel vba ユーザーフォームテ...
-
Excel VBA 複数選択したリスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
ハッシュテーブル(連想配列)が...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
変数名の取得
-
値を返さないコード パス
-
Powershellのparamについて
-
power BI クエリエディター 〇...
-
PysimpleGUIでデータベースを作る
-
DataTableに対するLINQについて
-
Excel VBAのリストボックスの値...
-
VB初心者。小数点以下の表示で...
-
Excel VBA 複数選択したリスト...
-
ダブルクリックをした順番に数...
-
PL/SQLでのTO_DATEの時間取得に...
-
[VB.net] DataGridViewのコンボ...
-
マクロで奇数と偶数の値を2か所...
-
ASPの変数の値をJAVA Script内...
-
vb6のVSFlexGridで選択行、列の...
-
シーケンサで最小値を保持する
おすすめ情報