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で質問しましょう!
似たような質問が見つかりました
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 2ちゃんねる Server relocation is in progress.って何でしょうか 1 2022/10/27 19:46
- 倫理・人権 酔っ払いが他人にたくさん迷惑を掛けているので、もっとお酒規制を厳しくした方が良いのでは? 2 2022/04/11 11:54
- 政治 Yahoo知恵袋について質問です。あそこの政治経済のスレッドですが、ここはいったいあそこは何なのです 4 2022/06/18 22:10
- グループウェア slackについて取り急ぎ教えて頂きたいことがあります 2 2022/04/08 09:05
- 2ちゃんねる ユーチューブで2ちゃんねるのスレッド紹介とかありますが、あれは2ちゃんねるだったときにつくられたスレ 1 2022/07/21 16:48
- その他(セキュリティ) Facebookのメッセンジャーの秘密のスレッドはエンドツーエンドの暗号化されてます。 セキュリティ 1 2022/09/03 14:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マルチスレッドのスレッド数を...
-
スレッドの安全な終了のさせ方
-
VC++スレッドの正しい終了のさ...
-
マルチスレッドの実行順序の制御
-
スレッドの終了はどうやるんで...
-
pthread_cond_wait 取りこぼし?
-
特定のスレッドの破棄
-
VB2005 シリアル通信のClose処理
-
C++ GUIのメッセージループ。
-
Win32APIでのスレッド処理
-
volatile の使い方
-
参照カウンタについてその3
-
LinuxでDoEvents()同等機能
-
WaitForSingleObjectの使い方に...
-
マルチスレッドについて
-
クラス内でのpthread_createに...
-
Linuxでスレッド優先度って変え...
-
スレッドの監視方法について
-
マルチスレッドでの画像描画
-
msec単位のWait Timerが作れない!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
WaitForSingleObjectの使い方に...
-
マイクロソフトedge で5チャン...
-
スレッドの安全な終了のさせ方
-
スレッドの終了はどうやるんで...
-
スレッドにて同一メモリの書き...
-
スレッドの監視方法について
-
マルチスレッドについて
-
スレッドの終了の仕方
-
Linuxでスレッド優先度って変え...
-
Windows上で、シグナル(SIGTERM...
-
LinuxでDoEvents()同等機能
-
VB2005 シリアル通信のClose処理
-
待機関数(WaitForMultipleObjec...
-
マルチスレッドプログラミング...
-
_beginthreadexで生成したスレ...
-
msec単位のWait Timerが作れない!
-
別スレッドからメインダイアロ...
-
マルチスレッドのスレッド数を...
-
.NetのBackgroundWorkerクラス...
おすすめ情報