• ベストアンサー

共有メモリでのデータ読み書きについて

hidebunの回答

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.2

共有メモリに書くデータに、サンプル番号を付けて、 ・データを書く ・そのデータに対応するサンプル番号を書く という処理を書いて、参照側はサンプル番号が付いているものは、 データも書けていると判定して、ロックフリーにしたことがありますねぇ。

sato-f
質問者

お礼

ご回答ありがとうございます。 参考にさせて頂きます。

関連するQ&A

  • 共有メモリの同時アクセスについて教えてください。

    2つのプロセスが同時に同じ共有メモリにアクセスすることは可能ですか? ミューテックスや、セマフォなどの排他制御を外せばできたりしませんか? 片方のプロセスで共有メモリから、データの一部をHDDに保存しつつ、それと同時に、もう片方のプロセスで共有メモリからデータの中身を表示させたいのですが・・・。

  • 複数の共有メモリの作成

    同じPC内に複数の共有メモリを作ろうとしています。自分の考えでは共有メモリを作成するときに shmget(key_t key, int size, int shmflg) のkeyを変えれば複数の共有メモリを作れると思ったのですがうまくいきません。ちなみにkeyは key = ftok(const char *pathname, int proj_id); で取得していて、pathnameとproj_idを変えればkey_tの値も変わり、複数の共有メモリが確保できると思ったのですが・・・。 また、ipcsで確認したところできた共有メモリのキーが0xffffffffになっているのも気になりました。普通は0x00000000になるべきなんでしょうか?

  • セマフォについて

    UNIXの装置内で、複数プロセスからの同時アクセス を排他する為にセマフォを使用するのですが、聞いた所 によると、セマフォを使用してロック中のプロセスが異 常終了した場合は、そのセマフォでロックした状態から 開放されないと聞きました。systmemVはロックしたまま で、posixは色々制御出来るかも・・・。と聞きました。 ロックを解除する方法があるものでしょうか?。又、そ のロックを解除する方法について、何らかの情報を教え て頂けますでしょうか?。

  • 共有メモリを使う場合のCPU負荷について

    共有メモリを使うプログラムでCPU負荷が100%になります.対策方法があれば教えてください. ちなみにCreateFileMapping関数で読み書きを行っています.

  • エレコムUSBメモリが途中で読み書きできなくなる

    エレコムのウイルス対策USBメモリ(型番:MF-PUVT3**GM*シリーズ)を使用しています。 マニュアルには、パスワード ロックを解除すると、USBメモリをPCから取りはずすまでは、 リムーバブルディスク領域にデータの読み書きができる状態です。と記載がありますが、長時間使用していると読み書きできなくなる時があります。 パスワード ロックを解除すれば、再び読み書きできるようになりますが、取り外ししていないのに書き込みできなくなる原因は何でしょうか。 ※OKWAVEより補足:「エレコム株式会社の製品」についての質問です。

  • 共有メモリの使い方について

    開発環境:Win2000 SP4 VB6.0 SP5 共有メモリを使用して、別プロセスとデータの受け渡しを したいと思っております。 色々調べた結果、CreateFileMappingを使用するまでは、 理解できたのですが、受け渡すデータについて困っています。 受け取る際のデータの形式が Public Type typXYData xx(20000) As Long yy(20000) As Long End Type のユーザー定義型なっていて、64KBを越える為に宣言が できません。 このような場合はどうやって共有メモリからデータを 受け取ったらよいのでしょうか? 解かる方ご教授お願い致します。

  • c# スレッド間でのデータの共有

    C#でメインプロセスと生成されたスレッド間でデータの共有をさせたいのですがどのようにすればいいのでしょうか。ご教授お願い致します。 ・メインプロセス(A) ・Aから生成されたスレッド(B) 例えば、AとBで変数の値をそれぞれ読み書きさせたい場合 どのようにすればよいのでしょうか。 class TEST { public int flag; // メインプロセス(A) public static void Main() { Thread t = new Thread(new ThreadStart(abc)); t.IsBackground = true; t.Start(); while(ture) { Thread.Sleep(10); Console.WriteLine("A:{0}",flag); } } // Aから生成されたスレッド(B) public void abc() { Console.WriteLine("B:{0}",flag); flag++; } }

  • staticのメモリ共有について

    staticについて調べたのですが、その内容があっているのかどうか 間違い・アドバイスなどありましたら是非伺いたいと思います。 よろしくお願い致します。 ------------------------------------------------------------  シェルから起動されるJavaでバッチ処理を行うアプリケーションを  作成していまして、サーバマシンの複数のプロセスから起動されます。  (つまりjavaコマンドが複数回同時に実行されます)  1回の実行の間保持しておきたい値をstaticなクラス変数に格納しています。  そしてそれは、1回の実行の間はずっと同じなのですが、  プロセスごとに異なる値です 。  この時、この1回の実行の間に保持しておきたい"static"な変数は  次のプロセスから実行された時に書き換えられるのか?  という疑問がでたのが始まりです。  マルチスレッドの処理はありません。 ------------------------------------------------------------ 調べたところ、 ■1台で2つ以上のJavaアプリケーションを実行する場合、  それぞれのアプリケーションを個別にjavaコマンドで起動・・・  =>javaコマンド毎に"個別のJVMが"それぞれのプロセス上で動作する。 ■フィールドをstatic指定するとクラス変数となり、  ロードされたクラスごとに"JVM上に"1つしか存在しない変数となる。 ・以上の2点から、staticの変数がメモリ上で共有されるのは  1つのJVM(1プロセス)内での話しであり、他のプロセスから  その値を書き換えられる事はないと考えています。  そして、1プロセス内でのマルチスレッドな処理を行っている場合、  staticな変数の値は注意が必要だけど、  複数プロセスでシングルスレッドな処理を行っている場合、  (性能などの問題上staticにするかどうか良し悪しはあるとしても)  staticな変数の値の不整合について  考慮は不要と考えても宜しいのでしょうか? 経験が浅い為、確信が持てずにいる状況です。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 共有データについて

    LANで接続されている複数のパソコンから共有データにアクセスして作業する場合、共有フォルダを作成するのと別ドライブを作成して共有するのとではどのような違いがでてくるのでしょうか。知識があまりないので質問がうまくできていないかもしれませんが、よろしくお願い致します。

  • セマフォとmutexの違いは?

    排他制御としてセマフォとmutexがありますが、 この二つの違いがよくわかりません。 自分で調べてみたところ、 ・セマフォ…プロセス間排他制御。複数ロックがかけられる。 ・mutex…スレッド間排他制御。ロックは一つだけ。 と言うような違いがあるようなのですが、これだけの差なんでしょうか? (これだけの差、と言ってる時点で筋違いだったら申し訳ありません) また、セマフォをスレッド間排他制御に用いたり、 mutexをプロセス間排他制御に用いることは可能なのでしょうか? 可能だとしたら、これらが2種類存在する理由も教えていただきたいです。