No.2ベストアンサー
- 回答日時:
念のため、前回の回答への補足です。
> こちらでも直前・直後にフラグをON/OFFさせる方法を試してみたのですが、
多分そうだろうなと思ってました。
> Unlock直後からSleepに入る際のわずかな期間に
> どうしてもフラグと実際のステートの齟齬が出てしまうため
> それを当てにすることはできないようでした。
スレッド制御において、齟齬のでない状態の管理というは不可能です。
もしそれが可能であるとすると、ミューテックスのような制御機構そのものが不要になりますので。
> やはり外部のスレッドの状態がどうであるかを気にしなくても済むようにプログラムする
> のが一番手っ取り早い方法のようです。
手っ取り早いと言いますか、それが本来の正しいやり方だと思います。
No.1
- 回答日時:
自分も興味を持ったので、少し調べてみましたが、難しいですね。
とりあえず、それらしいAPIを見つけられませんでした。
ただ、通常の1つのミューテックスなどで、処理を制御するケースでは、
他のスレッドの状態を知る必要のあるケースが想像つきませんでした。
どのような条件下で、他のスレッドの状態を知る必要が生じるのかを
簡単で良いので書いて頂くと回答し易いかも知れません。
(ただ、明快な回答をできるか解りませんが…。)
また、1つ擬似的な方法として、下記を記しますが、良い方法か悪い方法か解りません。
スレッド、t1,t2,…,tn に対して、
状態、s1,s2,…,sn を用意しておいて、
制御オブジェクト(ミューテックスなど)m1,m2,…,mnを用意します。
スレッドtkでのスリープ処理で、
mk.lock
sk = スリープ状態
mk.unlock
Sleep
mk.lock
sk = 非スリープ状態
mk.unlock
のように処理します。
他には、スレッドtkでのクリティカルな処理で、同様に、
mk.lock
sk = 状態の変更
mk.unlock
// クリティカルな処理
mk.lock
sk = 状態の変更
mk.unlock
のようにします。
他のスレッドから、スレッドtkの状態を知るには、
mk.lock
skの参照
sk.unlock
のようにします。
これで一応状態の管理はできるとは思います。
#役にたつかどうか解りませんが…。(変な回答ですいません。)
こちらでも直前・直後にフラグをON/OFFさせる方法を試してみたのですが、
Unlock直後からSleepに入る際のわずかな期間に
どうしてもフラグと実際のステートの齟齬が出てしまうため
それを当てにすることはできないようでした。
やはり外部のスレッドの状態がどうであるかを気にしなくても済むようにプログラムするのが
一番手っ取り早い方法のようです。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スレッドの監視方法について
-
WaitForSingleObjectの使い方に...
-
DirectX キーが入力されるまで...
-
スレッドの終了はどうやるんで...
-
C#でスレッド実行中のイベント...
-
特定のスレッドの破棄
-
マルチスレッド内のループについて
-
MFC通信プログラムマルチスレッ...
-
スレッドの終了の仕方
-
スレッドの安全な終了のさせ方
-
スレッド内のCString使用
-
VC++スレッドの正しい終了のさ...
-
スレッドについて
-
メインスレッドのPostMessageと...
-
C言語である関数への同時アクセ...
-
Mutexの次の使い方で
-
PHP スレッド構成の掲示板について
-
Macターミナルで実行中のプログ...
-
3のつく数字と3の倍数のみを表...
-
プロダクションコードとは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
VC++スレッドの正しい終了のさ...
-
Windows上で、シグナル(SIGTERM...
-
スレッドの安全な終了のさせ方
-
スレッドの監視方法について
-
スレッドにて同一メモリの書き...
-
別スレッドのデータを受信できない
-
スレッドの終了はどうやるんで...
-
同一スレッドで、ロックをかけ...
-
スレッドの終了の仕方
-
別スレッドからメインダイアロ...
-
_beginthreadexで生成したスレ...
-
待機関数(WaitForMultipleObjec...
-
VB2005 シリアル通信のClose処理
-
マルチスレッドについて
-
Linuxでスレッド優先度って変え...
-
msec単位のWait Timerが作れない!
-
自作クラスのイベントを外部ハ...
-
スレッド一覧の取得
-
C# スレッドから親ウィンドウへ...
おすすめ情報