2017-02-23 8 views
-1
void * sum_thread(void *data) 
{ 
} 

pthread_create(&thread_id[i], NULL, sum_thread, &arrdata[i]); 
+0

関数はvoidポインタを返します。それがあなたがそれを必要とする理由です。 – tilz0R

+0

pthreadsのPOSIX仕様を読んだだけで、クリアになるはずです – StoryTeller

答えて

0

これはpthreadsが期待する関数ポインタの形式なので、コールバック関数はその形式を持たなければなりません。これについては何も分かりませんが、POSIX標準で指定されているものです。

man pthread_createができます:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
        void *(*start_routine) (void *), void *arg); 

あなたは関数ポインタの他の種類を渡すだろう、それは両方のC標準およびPOSIX標準に違反する、とあなたは未定義の動作を起動します。

1

これは、pthreads API(pthread_create()が属する)の設計者が選択した戻り値の型(void *)と引数リスト(単一のvoid *)の組み合わせです。

このAPIを使用してスレッドを開始するすべてのプログラムは、その正確なプロトタイプをスレッド関数に渡す必要があります。この呼び出しの仕組みの詳細については、ドキュメント(the manual pageなど)を読むことができます。

C言語の「任意のデータ」を表現するためには、かなり一般的な方法です。

+0

pthread_createの構文を説明してください –

関連する問題