質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2334閲覧

ステッドのデタッチ状態とは?

strike1217

総合スコア651

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/08/06 05:29

スレッドやプロセスのデタッチ状態とはどういう状態でしょうか?

pthreadはデタッチ状態になるまでリソースを解放しない
pthread_attr_initのヘルプ・マニュアル
スレッドのデタッチとjoin

c

1void *wait_s(void *dmy){ 2 while(1){ 3 <なんらかの処理> 4 } 5} 6 7 pthread_attr_init(&atr); 8 pthread_attr_setdetachstate(&atr, PTHREAD_CREATE_DETACHED); 9 pthread_create(&pt, &atr, wait_s, NULL);

このようにデタッチの設定を行うとjoinする必要はなくなるんでしょうか?
逆にデタッチをしないで、無限ループのスレッドを作っても、joinすれば強制的に無限ループのスレッドも終了させられるんでしょうか?
もう1つ、デタッチなしで、無限ループのスレッド+joinなし でスレッドを作成し、main()のスレッドを終了させた場合、オルファンになるのでしょうか?

PTHREAD_DETACH

th が終了したときに、 th によって消費されていたメモリ資源を即座に解放することを保証する。

上記のように無限ループの場合、終了しませんよね?
デタッチする必要性は何でしょうか?

スレッドやプロセスのアタッチやデタッチがよく分かりません。
どういう状態を指すのでしょうか?

Linux 64bit gcc です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

detachするかjoinするかの2択ですね。ようは作成したスレッドを誰が殺すか、というお話です。

投稿2017/08/06 05:37

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/08/06 05:39

デタッチしていればjoinする必要はないんですよね?
yumetodo

2017/08/06 05:40

はい、意味不明なので。 detachした場合、生成したスレッドの処理が終了したら死にます。しなかった場合はjoinして初めて死にます。
strike1217

2017/08/06 05:43 編集

joinはmain()がスレッドを終了させるわけですよね? (無限ループなスレッドでも終了できるわけですよね?)
strike1217

2017/08/06 05:48

無限ループのスレッドが終了するまで待つんですか? 無限ループなので、永遠に終了しませんよね? main()が終了すれば、無限ループなスレッドも強制的に殺されるんですか?
yumetodo

2017/08/06 05:49

>無限ループなので、永遠に終了しませんよね? Yes。そもそも合流を想定しない無限ループなやつはdetachすべし スレッドを作っているprocessごと死ねばthreadも死にます。
strike1217

2017/08/06 05:52

あ〜。そうなんですか! オルファンになるのかと思っていましたが、threadも共に死ぬんですね! その合流という言葉の意味はなんですか? 調べると出てきますが、よく分かりません。
strike1217

2017/08/06 05:55

あ、なるほど 無限ループなスレッドをデタッチせずに、joinするのは無理ですね。 main()が終了した際に、joinが実行されないので! 無限ループなスレッドはデタッチするべきなんですね!
yumetodo

2017/08/06 05:56

joinableなスレッドは合流時に作業結果を返却することを想定しているんですね。
strike1217

2017/08/06 06:00

わかりましたわ。 main()が終了する際にスレッドも同時に終了されるため、リソースの解放の方法としてデタッチといものがあるんですね! joinせずに、すべてデタッチで実装すれば良いような気がしますが・・・?
strike1217

2017/08/06 06:04

デタッチを採用せずに、joinを使って無限ループのスレッドを待っていたら、main()の方も無限ループに陥ってしまうという理解で正しいのでしょうか?
yumetodo

2017/08/06 06:10

>joinせずに、すべてデタッチで実装すれば良いような気がしますが・・・? 実際スレッドの生成コストはわりとでかいのでスレッドプールと言って幾つかの(CPUのコア数分くらい)スレッドをdetachして保持しておいて生産者-消費者モデルでjoinもどきを作るのが一般的です。で、そんなコードをいちいち自分の手で書くのはバグのもとなので普通はIntel TBBのparallel_forみたいなやつを使います。
strike1217

2017/08/06 06:12

デタッチを採用せずに、joinを使って無限ループのスレッドを待っていたら、main()の方も無限ループに陥ってしまうという理解で正しいのでしょうか?
yumetodo

2017/08/06 06:14

どのくらいスレッド生成コストがでかいかというと、映像処理で毎frameスレッドを生成しているコードとIntel TBB parallel_forを使うコードで比較したところ3割くらい後者が高速でした。 >デタッチを採用せずに、joinを使って無限ループのスレッドを待っていたら、main()の方も無限ループに陥ってしまうという理解で正しいのでしょうか? ちがう、無限にwaitする
strike1217

2017/08/06 06:34

あ、失礼しました。無限にwaitしますね。
strike1217

2017/08/06 06:37

わかりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問