マルチスレッドについて②

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
atori
記事: 43
登録日時: 13年前

マルチスレッドについて②

#1

投稿記事 by atori » 12年前

再びマルチスレッドについてよくわからないところがあったので質問させていただきます。
2つの疑問点があります。

①スレッドは関数単位で動きますが、スレッドが終了した瞬間に、
 そのスレッドのスレッドハンドルは自動的にシグナル状態になるのでしょうか?

②WaitForSingleObject()は引数のハンドルがシグナル状態になるまで処理を待つ。というのはなんとなくわかるのですが、
 それはつまりこの関数を呼んでいるスレッドが止まるということなのでしょうか?
 そうだとしたら、その関数の動きが止まってしまいWaitForSingleObject()が動かなくなるということにはならないのでしょうか?

②の説明がしづらいです。自分は「スレッドは止まるが、引数のハンドルの状態は見ていてくれる」と解釈しています。
実際はどうなのか、よろしくお願いします。
Done is better than perfect.(Mark Elliot Zuckerberg)

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: マルチスレッドについて②

#2

投稿記事 by YuO » 12年前

atori さんが書きました:①スレッドは関数単位で動きますが、スレッドが終了した瞬間に、
 そのスレッドのスレッドハンドルは自動的にシグナル状態になるのでしょうか?
正確には,スレッドオブジェクトがスレッド終了後にシグナル状態になります。
Terminating a Threadに,スレッド終了時に何が起きるかは書いてありますが,その順序までは書いてありません。
atori さんが書きました:②WaitForSingleObject()は引数のハンドルがシグナル状態になるまで処理を待つ。というのはなんとなくわかるのですが、
 それはつまりこの関数を呼んでいるスレッドが止まるということなのでしょうか?
 そうだとしたら、その関数の動きが止まってしまいWaitForSingleObject()が動かなくなるということにはならないのでしょうか?
WaitForSingleobjectを呼び出したスレッドは待機状態になります。
待機状態の解除条件は,ハンドルが示す先のオブジェクトがシグナル状態になることです。
また,監視を行うのはシステムですので,シグナル状態になった時点でスレッドは待機状態から解除されます。
# タイムアウトやオブジェクトの破棄という解除条件もあります。

WaitForSingleObjectを呼び出したスレッドが監視するわけではないので,ちゃんとWaitForSingleObjectから復帰します。

atori
記事: 43
登録日時: 13年前

Re: マルチスレッドについて②

#3

投稿記事 by atori » 12年前

なるほど・・・
丁寧に説明していただきありがとうございました。

とてもわかり易かったです。
疑問が解消されたので、このトピックは閉じさせて頂きます
Done is better than perfect.(Mark Elliot Zuckerberg)

閉鎖

“C言語何でも質問掲示板” へ戻る