問題タブ [pthread-key-create]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - メインスレッドの破棄順序とpthread_key_createの使用
pthread_key_create
デストラクタ関数を渡しながらの使い方が気になりました。
私はこのようなものが欲しかった:
明らかに、私はかなりの詳細を省略しました。
メインスレッドではないスレッドの場合、これは明らかに問題ありません(ロックなどが提供されます)。スレッドが停止するたびに、workoncomplex
関数が呼び出されてfoo
オブジェクトを操作します。
私の質問は、これはメインスレッドに有効ですpthreadkey
か?デストラクタの呼び出しはスレッドの終了時に発生するのは明らかですが、スタティックが破棄される前に実行されることが保証されていますか?もしそうなら、私はメインスレッドにいるかどうかを確認し、すぐに戻る必要がありますか?または、すべてのスレッドを同じように扱い、静的オブジェクトがまだ存在していると想定することはできますか。
c - スレッド固有のデータ
次のようなクライアント プログラムがあり、マルチスレッド化する必要があります。つまり、接続ごとに 1 つのスレッドです。ただし、変数 sockfd は 1 つのスレッドに対してグローバルに保持されます。これを行うには、pthread_key_t、pthread_key_create...などを使用する必要があることを理解しています。でも、使い方に困っています。どんな助けにも感謝します。
1 つのスレッドに対してプログラムを実行しましたが、正常に動作します。しかし、スレッドの数を1つ以上に増やすと、グローバルな利用可能なsockfdのために機能しません。これはもっと大きなもののためのテストプログラムです。
感謝と敬意
pthreads - pthread_key_t とメソッド pthread_key_create はどのように機能しますか?
pthread_key_t と pthread_key_create がどのように機能するかを理解するのに苦労しています。私の理解では、各スレッドには TLS (スレッド ローカル ストレージ) があり、スレッド ローカル ストレージへのアクセスにはキーが使用されます。私が得られないのは、キーが作成されたときです。すべてのスレッドがそれを使用しますか? スレッド 0 がキー 0 を作成するとします。スレッド 1 はキー 0 を使用できますか? スレッド 1 がキー 0 を使用した場合、スレッド 1 は独自の TLS またはスレッド 0 の TLS にアクセスしますか?
使用されているすべてのキーを追跡するグローバル配列または何かがありますか?
c - pthread_key_create を使用する理由がわかりません。理由を教えてください。
pthread_create /( key_ではない) を使用する場合、スレッドごとに値を使用する場合は、引数をスレッドに渡すことができます。静的ストレージを使用する場合、mutex を使用します。では、pthread_key_create を使用するとはどういうことでしょうか? 例を挙げて、なぜそれが生まれたのかを強調します(アプリケーションとその必要性)? シングル スレッド アプリケーションの移行に役立つと聞きましたが、まだミューテックスを使用しています。それで、ポイントは何ですか?
ありがとう!
multithreading - スレッド固有のデータを正しく使用する方法
私はpthreadを使ってプログラミングしています。スレッドごとに異なる値を持つグローバル変数が必要です。また、スレッドは同じ関数を使用して、値を変更するなど、この変数を処理します。1 つのスレッドがその値を変更しても、他のスレッドの値は変更されません。そこで、スレッド固有のデータを使用しようとして、例を書きました。関数で pthread 操作をラップする必要があります。例: setspecific()、changedata、printdata()、create_key()、delete_key() など。
2 つのスレッドを作成します。1つのスレッドを2秒間スリープさせると。正解が出ます。
コメントすると /* sleep(2); */ 、不正解です。
スレッドをスリープさせずに正しい結果を得たい。一方のスレッドが他方のスレッドが pthread_setspecific() の呼び出しを終了するのを待つべきではありませんよね? 私は何をすべきか?ご検討いただきありがとうございます。struct_data をグローバル変数として定義するのは正しいでしょうか? 誰でも私を助けることができますか?
c - セグメンテーション違反または SizeOf が正しく使用されていない
そのため、pthreads を使用して問題を並行して解決するプログラムに取り組んでいます。現在、関数で次のコードを実行すると、セグ フォールトが発生します: average_power.
これは、エラーがどこかにあると確信しているコードの関連部分です。
これはワーカー関数と、スレッドが初期化されて命令が与えられる別の関数のこのセクションから渡された構造体の引数です。
だから私が得ているエラーは、 *worker の最後に average_power が呼び出されたときのいずれかのスレッド内の segfault であるか (average_power は正しいことを証明しました)、または次の行のコメントを外すとエラーが発生します配列を初期化する私のループ。
outputNew が arg 構造体に入れられる前に、上書きされないように独自のスペースがあることを確認したかったのですが、この行はコンパイルを防ぎます。私はそれを正しくしていませんか?それ以外の場合、 average_power は args 構造体からこの変数 (出力) にアクセスし、それが発生すると segfault が発生します。これは、どこかのメモリが正しく使用されていないことを意味すると思いますか? これが非常に長い場合は申し訳ありませんが、十分に表現していない場合は、部分を明確にすることができます. 他のすべての関数または呼び出しは私のプロジェクトに関連しており、それらが正しいことはわかっています.pthreadの実装からエラーが発生し、どこかにデータを渡しています。
pthreads - pthread_key_create が失敗した後にキーに対して pthread_key_delete を呼び出すとどうなりますか?
次のコードがあるとします。
失敗した場合pthread_key_create
、呼び出しは未定義の動作pthread_key_delete
と見なされますか? コメントアウトしたらどうですか?pthread_key_create
POSIX 標準のpthread_key_deleteセクションには、次のように記載されています。
pthread_key_delete() 関数は、以前に pthread_key_create() によって返されたスレッド固有のデータ キーを削除します。
は以前に によって返されpthread_key_delete
たスレッド固有のデータ キーを想定しているため、 によって返されなかったキーを呼び出すと、未定義の動作が発生する可能性があります。pthread_key_create
pthread_key_delete
pthread_key_create
c - Cでは、pthread_createで関数の名前を使用する場合、参照を使用するのと同じですか?
私はそれを正しく言ったかどうか確信が持てません。
私はスレッドを学んでいます。ウェブサイトやビデオを本当に簡単にすることができれば、それは素晴らしいことです. スレッド - ロック、条件変数など。ありがとう!
multithreading - pthread_create() 中のセグメンテーション違反
わかりましたので、別々のスレッド (メイン スレッドと、pthread_create を使用して作成したセカンダリ スレッド) で 2 つのファイルをバブル ソートしようとしています。私のバブル ソートは完全に機能します。何度かテストしたので、ここには含めませんでした。問題は、pthread_create の行でセグメンテーション エラーが発生することです。
ファイルを読み取ってソートするバブルソート機能があります。完璧に動作します。void *bubblesortCars(char *filename)
これがセグメンテーション違反を引き起こしている問題
ただし、このようにすると完全に機能しますが、両方のスレッドを同時にバブルソートしたいので、このようにしたくありません。