OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

セマフォの使用例を教えてください。

  • すぐに回答を!
  • 質問No.135544
  • 閲覧数2333
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (7/7)

こんにちは。COPY_ROBOT4です。
現在、VCのセマフォの使用例を今探しています。MSDNを見たのですが、文章で書いてあるだけで、実際どのように書いたらいいのか分かりません。どうか知っている知識を少し分けてください。

【セマフォをどのように使いたいか】
データ書き込み中、読み込み中にも関わらず、またデータ書き込み、読み込みをしないように、最中はロックをしたいと考えています。

この場合、どうすればいいですか?どうか使用例を教えて下さい。
また、お勧めサイトがあったら是非教えて下さい。
何もかも、聞いてしまって申し訳ないです。お願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1

WIN32APIでいいのかな?
まずは、Mutexについてですが、あらかじめ、
HANDLE mutex = CreateMutex(NULL, FALSE, NULL);
と作成した、ミューテックスオブジェクトがあるとします。

void AccessFile()
{
 WaitForSingleObject(mutex, INFINITE);

 CreateFile(...);
 WriteFile(...);
 CloseHandle(...);

 ReleaseMutex(mutex);
}

複数のスレッドから、AccessFileを同時に呼び出しても、WaitForSingleObjectから戻ってくるスレッドは1だけになります。その他のスレッドは戻ってきません。WaitForSingleObjectを通過したスレッドが、ReleaseMutexを呼び出せば、その他のスレッドのどれか1つがWaitForSingleObjectの呼び出しから戻ってきます。

で、セマフォの場合はどうなのかというと、
HANDLE semaphore = CreateSemaphore(NULL, 4, 4, NULL); // 4つまで通過できるとする

void AccessFile()
{
 WaitForSingleObject(semaphore, INFINITE);

 ...

 ReleaseSemaphore(semaphore, 1, NULL);
}

同様に、複数のスレッドから、AccessFileを同時に呼び出した場合、WaitForSingleObjectから戻ってくるスレッドは4つが最大になります。この場合、なんらかのリソースが4つ存在するから、4つのスレッドが通過できるというようにするのですが、実際にどのリソースが使用可能かは、セマフォとは別に作成してやる必要があります。
お礼コメント
COPY_ROBOT4

お礼率 100% (7/7)

細かく教えていただいてありがとうございました。
とっても助かりました。少し前に進むことができました
でも、難しいですね。仕様を考え初めてもう、4日も立つのにまだ半信半疑です。inthefloiさんの回答を何回も読み直してがんばります。どうもありがとうございました。
投稿日時 - 2001-09-17 22:08:10
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ