2

クライアント接続を受け入れるとフォークするCプログラムを書いています。これが発生したら、2つのスレッドを生成したいのですが、これを機能させることができないようです。

    pthread_t t1, t2;
    void *r_loop();
    void *w_loop();
    .
    .
    .

sockfd = accept(r_sockfd, (struct sockaddr *) &address, &len);
if (sockfd < 0)
    printf("Error accepting\n");

if (!fork())
{
    int r_thread = pthread_create(&t1, NULL, r_loop, NULL);
    int w_thread = pthread_create(&t2, NULL, w_loop, NULL);

    pthread_join(r_thread, NULL);
    pthread_join(w_thread, NULL);
    exit(0);
}

これを実行すると、関数r_loopとw_loopが実行されません。

4

2 に答える 2

5

問題はこれである可能性があります: 成功した pthread_create() は常にゼロを返します。pthread_join() に間違った値 (t1 と t2 ではなくゼロ) を渡しているため、すぐに返されます。次に、次の exit() も新しい開始スレッドを強制終了します

于 2012-09-11T14:44:31.673 に答える
1

t1andt2の代わりにr_threadandw_threadを渡す必要がありますpthread_join()

于 2012-09-11T14:45:55.120 に答える