1

次のコードがあります。

for(i = 0 ; i < max_thread; i++)
{
    struct arg_struct args;
    args.arg1 = file;
    args.arg2 = word;
    args.arg3 = repl;
    if(pthread_create(&thread_id[i],NULL,&do_process,&args) != 0)
    {
        i--;
        fprintf(stderr,RED "\nError in creating thread\n" NONE);
    }
}
for(i = 0 ; i < max_thread; i++)
    if(pthread_join(thread_id[i],NULL) != 0)
    {
        fprintf(stderr,RED "\nError in joining thread\n" NONE);
    }


int do_process(void *arguments)
{
//code missing
}

* (void *)do_process を (int) do_process に変換するにはどうすればよいですか?*

その関数は非常に重要な情報を返します。これらの情報がないと、返信の読み方がわかりません。

次のエラーが表示されます: 警告: `pthread_create' の引数 3 を渡すと、キャストなしで整数からポインターが作成されます

4

3 に答える 3

0

pthread_join() は、2 つのスレッド間で通信するための簡単な方法です。これには 2 つの制限があります。まず、ポインターから値を 1 つしか渡すことができません (ポインターにして、複数の値を格納できます)。次に、スレッドがすべて完了したときにのみ返すことができます。この値を返した後、スレッドは終了状態になります。そのため、スレッドがよりきめ細かい方法で通信するようにしたい場合は、共通の共有データを使用する方が適切です。もちろん、最低限、Pthread ミューテックスを使用して共通データへのアクセスを同期する必要があります。また、スレッドが相互に通信できるようにする場合は、Pthread condvars も使用する必要があります。

于 2013-08-24T02:15:45.497 に答える