1

こんにちは、私は C を初めて使用するので、非常に迷っている場合は申し訳ありません。作成しようとしているこのマルチスレッド Web サーバーで問題が発生しています。私はしようとしています...

  • スレッドを作成する 新しいスレッドを作成する
  • その新しいスレッドに execvp() を実行させて、自分のマシンで別の C プログラムを呼び出す
  • その新しいスレッドが execvp() からデータのストリームを返すようにする

pthreads を使用して新しいプロセスを生成し、execvp() を実行して、パイプ経由でデータを返すことを考えていました。しかし、それは必要ですか?pthread はメモリを共有しませんか?

また、pthread の代わりに fork() を使用して、パイプを介して子にデータを親に送り返すことを考えていたのかもしれません。

正しい方向に私を導くのを手伝ってください。

4

2 に答える 2

3

あなたが探しているのは、関数fork()の1つであると(または多分または何か、しかしパイプも機能します) の組み合わせです。execpipe()socketpair()

スレッドはメモリを共有しますがexecvp()、呼び出し元プロセスを置き換える完全に新しいプロセスを作成します。このプロセスがその親とメモリを共有していたとしても (そうかどうかはわかりません!)、新しく実行されたプログラムは使用方法を知りません。その記憶。

適切な方法は、まだ 1 つのプロセスがあるときfork()に 2 つのプロセス (親と子) にパイプを開き、子に を呼び出すことexecvp()です。子はパイプの最後に書き込むことができ、親はもう一方の端から読み取ることができます。

wait()子供が終わるのを忘れないでください。

于 2013-03-01T08:16:34.993 に答える
1

ノンブロッキングのシングルスレッド Web サーバーを作成しましたか? 比較対象がない場合、マルチスレッドの利点をどのように測定すると思いますか? シングル スレッド プロジェクトを同時実行にさらすと、どこでパフォーマンスが向上するかを判断する方が、プロジェクトの残りの期間を推測して貧弱なフレームワークで苦しむよりもはるかに簡単です。

スレッドの作成は簡単ですが、最初にpthread_create のマニュアルを読む必要があります。プロジェクトがエラーを正しく処理していることを他にどのように信頼できますか? 他の pthread 機能についても読むことをお勧めします。ところで、問題を自分で解決しようとしていることを示していただければ、問題解決のお手伝いをさせていただきます。私はあなたにスプーンで食べさせません。

aaaaaa123456789 が述べたように、pthread_create/execvp を使用して生成したくないでしょう。これは、プログラム環境全体 (すべてのスレッドを含む) を新しいプロセスに置き換えるためです。

于 2013-03-01T08:30:42.093 に答える