1

メインスレッドを使用して結果を出力する単純なプログラムをCで作成しようとしていますが、スレッドを作成するときにスレッドIDを確認すると、結果を印刷するときに2つの異なるIDが表示されます。これが私のコードです:Cx

#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <sys/time.h>

void *Utskrift(void *simpleInt)
{
  int simple;

simple = (int)simpleInt;
/*Printing my result and thread id*/
printf(";Hello From Thread ! I got fed with
an int %d! AND it is THREAD    ::%d\n",simple,pthread_self());

 }


 main(){

pthread_t thread_id;
int test=2;
/*Using main thread to print test from method Utskrift*/
pthread_create (&thread_id, NULL,&Utskrift,(void *) test);
/*Taking look at my thread id*/
printf(" (pthread id %d) has started\n", pthread_self());
pthread_join(thread_id,NULL);


}

私はスレッドプログラミングとCも初めてです。だから私は誤解したかもしれませんpthread_create (&thread_id, NULL,&Utskrift,(void *) test);。メインスレッドを使用してメソッドを呼び出しUtskriftて結果を出力しますか、それともメインスレッドに新しいスレッド「子」を作成してから子が結果を出力しますか?もしそうなら、メインスレッドを使用して私の「テスト」を印刷する方法を説明していただけますか。

出力:

(pthread id -1215916352) has started ;Hello From Thread ! I got fed with an int 2! AND it is THREAD ::-1215919248
4

3 に答える 3

1

main()もスレッドです。したがって、スレッドを作成するときは、基本的main()に、新しいスレッドからフォークして他の何かを処理します。pthread_join()新しいスレッドが終了するまで待機してから、メインスレッドを続行します。それが理にかなっていることを願っています。

于 2013-01-31T15:48:12.440 に答える
0

この行main

printf(" (pthread id %d) has started\n", pthread_self());

以前に作成したものではなく、メインスレッドのpthreadIDを出力しています。スレッドで取得するIDは、に格納されているIDと同じである必要がありますthread_id。あなたはおそらく書くつもりでした:

printf(" (pthread id %d) has started\n", thread_id);

補足:pthread_t多くの場合、単なるintよりも大きくなります。次のように印刷することをお勧めします。

printf("... %lu ...", ..., (unsigned long)thread_id, ...);
于 2013-01-31T15:51:12.087 に答える
0

pthread_createfunction(spec )は、渡された関数(この場合Utskrift)を実行する新しいスレッドを作成します。pthread_createの最後のパラメータで渡された値は、関数に渡されます。

メインスレッドで関数を呼び出したいだけの場合はUtskrift、通常の方法で呼び出すことができます。

Utskrift((void *)test));

完成したスレッドから別のスレッドにデータを戻したい場合はpthread_join、スレッドの開始ルーチンによって返される値、またはスレッドが渡す値のいずれかを返すを使用できpthread_exitます。

#include <pthread.h>
#include <stdio.h>

void *checker(void *arg) {
    int number = (int) arg;

    if (0 == number)
        return "number was zero";
    else
        return "number was not zero";
}

int main(void) {
    int test = 0;
    pthread_t thread_id;
    char *s;

    pthread_create (&thread_id, NULL, checker,(void *) test);
    pthread_join(thread_id, &s);
    printf("%s\n", s);

    test = 1;

    pthread_create (&thread_id, NULL, checker,(void *) test);
    pthread_join(thread_id, &s);
    printf("%s\n", s);

    return 0;
}
于 2013-01-31T16:05:16.327 に答える