2017-06-14 5 views
2

スレッドは動的にメモリを割り当てられますか?スレッドの作成 - 動的に割り当てられていますか?

私はスレッドをよく理解していて、それらの使い方をよく知っています。私は特にスレッドのPOSIX APIを見てきました。

私はスレッドの作成方法と、単純なmalloc呼び出しとの違いを理解しようとしています。

私はスレッドが親プロセスと特定のメモリセグメントを共有していることを理解していますが、それ自身のスタックを持っています。

このトピックで私が読める資料はありがたいです。ありがとう!

+0

pthreadローカルストレージについては、[this](https://gist.github.com/jbwyme/9479813)を参照してください。 pthread runはスレッドとして機能し、各スレッドには独自のスタックがあります。 –

+0

スレッドには単なるメモリ以上のものがあります。通常、スレッドはオペレーティングシステムのデータに関連付けられます(OSタスクに関連付けられている場合)。スレッドは、その戻り値を結びつけることができます。スレッドは、通知または取り消すことができます。 – EOF

+0

私は何にも同意しません。スレッド作成などでmallocが使用されているかどうか、興味があります –

答えて

0

スレッドの作成とmalloc()呼び出しは、全く異なる概念です。 malloc()呼び出しは、プログラムの使用のために、ヒープから要求されたバイトのメモリチャンクを動的に割り当てます。

スレッドは「軽量プロセス」と見なすことができます。スレッドはプロセス内のエンティティであり、すべてのプロセスは実行を完了させるために少なくとも1つのスレッドを持ちます。プロセスのスレッドは、プロセス仮想アドレスとプロセスのすべてのリソースを共有します。プロセスの新しいスレッドを作成すると、これらの新しいスレッドは独自のユーザースタックを持ち、スケジューラによって独立して実行されるようにスケジュールされます。また、スレッドが同時に実行されるためには、プリエンプション直前のスレッドの状態、すなわちすべてのレジスタの状態を格納するコンテキストを持つことになります。

0

スレッドは動的にメモリを割り当てられますか?

いいえ、何も並べ替えはありません。スレッドには少なくとも1つのスタックと一意に関連付けられたメモリがありますが、そのようなメモリはスレッド自体ではありません。

私はスレッドの作成方法と、単純なmalloc呼び出しとの違いを理解しようとしています。

新しいスレッドの作成も同じではありませんのメモリ割り当てです。 2つは全く匹敵しない。

直接OSサポート(すべてではない)を持つスレッディング実装は、スタック、カーネルデータ構造、またはその他のスレッド実装関連データ用のメモリを得るためにCライブラリに頼ることはまずありません。一方、Linuxの古い「グリーン」スレッドのようにOSをサポートしていないものは、Cライブラリを介してメモリを割り当てる可能性が高くなります。直接OSをサポートしていないスレッド実装でも、malloc()自体が必要とするように、システムコールを使用して必要なメモリを取得するオプションがあります。いずれにしても、得られるメモリ自体はスレッドではありません。

OSがサポートされているスレッドシステムとサポートされていないスレッドシステムの違いは、スレッドAPIと直交していることにも注意してください。たとえば、Linuxの緑色のスレッドや現在普及しているカーネル対応のNPTLスレッドはどちらも、POSIXスレッドAPIを実装しています。

関連する問題