問題タブ [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 に答える
524 参照

c - pthread_join はメインスレッドには影響しません

この Sockets チュートリアルhttp://www.binarytides.com/socket-programming-c-linux-tutorial/を見つけましたが、最後の例で問題が発生しています。これは、ソケットと pthread を使用するスレッド サーバーです。

コードは正常にコンパイルされますが、期待どおりに動作しません。電話が原因であると思わpthread_joinれますが、よくわかりません。

Cygwin (32 ビット) と Alpine Linux (32 ビット) の両方で、GCC 4.8.3 と 4.8.2 の両方でサーバーとクライアントをコンパイルして実行しようとしました。問題は両方の環境で同じです。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_join.htmlでpthreads のpthread_joinドキュメントを読みましたが、サーバー コードでの呼び出しに問題があるようには見えません。pthread_join

サーバー、クライアント、および出力を更新しました。

サーバーコード:

クライアントコード:

サーバーからの出力:

クライアントからの出力:

メイン スレッドが sniffer_thread の前にリターン/終了するようです。

どんな助けでも感謝します。

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

pthreads - スレッドパラメータを値ではなく参照として渡す方法は?

スレッドの作成と参加に問題があります。また、参照によってスレッド パラメーターを渡す方法の構文についてもわかりません。コードは、スレッドが作成されたときと、スレッド ルーチンでスレッドがスリープする時間の長さを出力する必要があります。

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

c - pthread_join でのエラー

私のプログラムはいくつかのスレッドを作成する必要がありますが、リターン ( safe ) が 0 ではなく 3 であるため、常にエラーのケースになるため、pthread_join で立ち往生しています。 .

編集:自分自身をよりよく説明するために、エラーは、コードが想定されていないときにエラー処理領域に入っていることです。これは、「エラー待機中:成功」メッセージが表示されることを意味します。

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

c - pthread_join() 予期しない結果

得られた結果のために、 pthread_join() 関数を理解するのに苦労しています。

pthread_join() が、指定されたスレッド ID のスレッドが終了するまで呼び出しスレッドを一時停止することになっている場合、次のコードが最初にスレッド 1を実行せず、次にスレッド 2を実行するのはなぜですか。それらは両方同時に起こっています。

(main から) 2 つの pthread_join() 行を取り出すと、プログラムは終了し、何も起こりません。これは、メイン スレッドが両方の結合関数の呼び出しプロセスであり、新しく作成された他の 2 つのスレッドが終了するのを待っているのはメイン スレッドであることを意味しますか?

出力:

ここに画像の説明を入力

sleepコメントアウトした出力:

ここに画像の説明を入力

なぜ pthread_join がドキュメンテーションであなたが信じていることをしていないのか、誰か説明できますか?

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

c - スレッド間の競合状態を回避するピーターソンのアルゴリズム

詳細:

競合状態を回避するために、ピーターソンのアルゴリズム(以下)を実装しています。私がやりたい方法は、グローバル整数変数を宣言し、スレッド 1 と 2 を作成することです。スレッド 1 がグローバル変数にアクセスできるときはいつでも、出力aしてグローバル変数カウンターに 1 を追加する必要があります。スレッド 2 がこのグローバル変数にアクセスできる場合、出力bしてグローバル変数カウンターに 1 を追加する必要があります。これは、グローバル変数が特定の数 (10 としましょう) に達するまで継続する必要があります。その後、スレッド(グローバル変数に最後に追加した2つのスレッドのいずれか)がグローバル変数を1にリセットし、両方のスレッドが終了する必要があります。これまでに実装したコードは、競合状態を回避しますが、カウンターが制限に達したときに両方のスレッドを終了できません。

質問:

  • カウンターが特定の制限に達したときに、どうすれば両方のスレッドを終了できますか。

  • スレッドを終了する適切な形式は何ですか。現在、exit() を使用していますが、これはあまり効率的ではないと思います。

ピーターソンのアルゴリズム

私のコード:

編集:カウンター制限値をチェックしているifステートメントをクリティカルセクションに配置する必要があることに気付きました(フラグをfalseに変更する前に)。