問題タブ [pthread-join]

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.

0 投票する
1 に答える
683 参照

c - C でのパスワード チェッカーのマルチスレッド化

pthread_create現在、このプログラムで 、pthread_joinpthread_exit、およびを使用してマルチスレッドを使用しようとしていますpthread_self。次に、コードcrypt_rの代わりに使用するつもりです。crypt

最大 8 スレッドまでしか使用できませんが、2 スレッドから始める方法さえわかりません。を宣言する 1 行しかありませんpthread_t t1,t2,t3,t4,t5,t6,t7,t8

これらの計画は、それらをに入れることですpthread_createが、これらの値を初期化する以外に、ここからどこに行くべきかわかりません。

pthread_create の入力が次のようになることpthread_create(t1, NULL, ... , ...)はわかっていますが、3 番目の入力を作成する方法や 4 番目の入力が何であるかはわかりません。次に、コマンド ライン引数で指定されたスレッドの数に基づいて、各スレッドがチェックする文字の範囲を分割する必要があります。これまでのところ、1 つのスレッドのみで動作するように設計してきましたがcrypt_r、マルチスレッドに移行することを計画しています...

どうすればこれを機能させることができるのか、本当に混乱しています..可能であれば。

ある種の void 関数がpthread_create.. の 3 番目のエントリであることは知っていますが、その関数は私の passwordChecker である必要がありますか? または何?

malloc された構造体を使用する

0 投票する
5 に答える
8187 参照

c - pthread_join() からエラー コードを取得するにはどうすればよいですか?

次のコードは pthread の参加に失敗し、「参加に失敗しました」というメッセージが出力されます。障害とその原因に関する詳細情報を取得するにはどうすればよいですか?

編集:実際に結合が返さno errorれ、私は間違いを犯しました。!if ステートメントには、true と評価される問題がある場合、join がゼロ以外の数値を返すため、 を含める必要はありません。

0 投票する
1 に答える
345 参照

c - pthread_join() は順次実行を引き起こすことができますか?

pthread_join() を使用すると、それが適切な場所にあるかどうかわかりません。現在のように、スレッドが終了するのを待ってから、ループを再度反復しますか? 私が求めているのは、二重の for ループから取り出して、pthread_join() の直後に新しい for ループを作成する必要があるということですか?

PS: 私は一般的なスレッドと C 言語に非常に慣れていません。また、malloc の解放に関する別の質問があります (コード内のコメント)。内部 for ループの各反復後に malloc 結果ポインターがなくなるため、 free キーワードをどこで使用するかわかりません。

これが私のコードです。これは、事前定義された 2 つの行列 (A&B) の行列乗算用です。(これは、先生が私たちにそうしてほしかった方法です)。

0 投票する
2 に答える
1561 参照

c - スレッド番号 5 に参加するセグメンテーション違反 (pthread_join)

同期の小さな問題を解決しようとしています。しかし、スレッドに参加すると、5回目の反復でセグメント違反が発生します! 4 つのスレッドのみを作成すると、完璧に動作します。

ここでは、スレッドを実行するための基本的なコードをいくつか残します。

で実行:./work -h 4 -e 0 -b 1

それらは以下で実行されます:./work -h 5 -e 0 -b 1

「-h」の値を 4 以上に増やすと、セグメンテーション違反が発生します

なぜこれ?

0 投票する
1 に答える
639 参照

multithreading - スレッド結合が永久に待機する: 結合がハングするか、永久に待機する

以下のようなコードがあります

プロセスを正常に終了しようとしています。しかし、問題はめったにありません。参加時にプログラムがハングすることはほとんどありません。

スレッドは、無限 while ループでまだアクティブです。stop が呼び出された後でも、m_alive 値は「true」です (stop では false に設定されます)。m_alive は volatile として宣言されています。

0 投票する
2 に答える
13612 参照

c - C - n スレッドの作成

私は次の機能に取り組んでいます。この関数は n 個のスレッドを作成する必要があります。また、子スレッドのtidを出力する必要があります。しかし、現時点では少し混乱しています。それを実行すると、たとえば 5 つのスレッドを作成すると、常に同じ tid が返されます。私が理解している限り、tid は呼び出し元のスレッド ID です。同じ呼び出し元がこれらすべてのスレッドを呼び出していますか、それとも何か問題がありましたか? コードは次のとおりです。

たとえば、次の入力spawnThreads(4) に対して次の出力を取得します。

要約すると、関数は>i< >tid<を出力する必要があります。>tid<は子の TID を示し、>i<は 1 から n まで続きます。

しかし、なぜ同じ tid の 4 倍になるのでしょうか? 私は何を間違えましたか?何がうまくいかなかったのか誰かが説明してくれれば幸いです。

0 投票する
0 に答える
620 参照

c - pthread_join セグメント障害

pthreads を使用して並列ソートを行っています。現在、私は 4 つのスレッドで作業しており、開始したばかりなので、現在、同じグローバル ロケーションにアクセスするスレッドはありません。(2 つの変数をグローバルに宣言しました。変数は大きなサイズの配列であり、2 つのスレッドが同じインデックスにアクセスしないようにしています。)

AASort 内で、別の関数が呼び出されています。このコードは、AASort 関数内で関数を呼び出さない場合に機能します。

0 投票する
3 に答える
153 参照

c - pthread_cond_signal によって解放されたスレッドを知る方法

乾杯、

論理的デッドロックを引き起こしているスレッドが 2 つあります => d_santa と d_patuljak (申し訳ありませんが、いくつかの部分はクロアチア語で書かれており、翻訳する時間がありませんでした)

d_santa はこれを行います

d_patuljak がこれを行います

それが役立つ場合は、ここにもd_sobがあります

タスク: d_santa は 1 回だけ作成され、d_patuljak が作成され続けている間、常に眠っているか、何か「役立つ」ことを行っています。グループ 3 が作成されると、santa がすべての問題を解決するのを助けることができるように (d_patuljak が速く作成されたかどうかに注意してください) 3 つ以上のパトゥリャクが存在する可能性がありますが、サンタは 3 つのグループしか取りません!!)。すすり泣きの場合と同様に、10 個になるまで作成され続け、その後はブロードキャストできます (11 個はあり得ません)。

私の解決策 (考え): 1、2、3 個のパトゥルジャクを作成し、それぞれが配列内に独自の場所を持っているようにします。Patuljak 3 が作成されると、彼はサンタを目覚めさせます (pthread_cond_wait もバイパスします)! サンタは目を覚まし、3 つの連続した pthread_cond_signals を呼び出して、patuljak 1、patuljak 2、patuljak 3 を解放します => 注: patuljak 1 は解放されてスレッドを終了し、pthread_cond_signal のすぐ下に配置した pthread_join によって「破棄」されます!!

問題: pthread_join(patuljak 1) が patuljak 1 を待ち続けるということは、pthread_cond_signal が patuljak 1 (おそらく patuljak 2 または 3) を解放できなかったことを意味します。この問題を解決する方法がわかりません。何をリリースするか、または patuljak 1,2,3 を正確にリリースする方法を知る方法はありますか? 私はブロードキャストを使用しますが、patuljak 4 はリリースされず、サンタは 3 つのグループのみを取得することはできません。

とにかく、プログラムはこれよりもはるかに大きいです。レインディア (=sob) にも同様の問題があり、ブロードキャストしようとしましたが、pthread_join でスタックします。patuljaks の問題が解決されれば、同じことが続くと感じています。トナカイ (patuljak=>dwarf) xd.