まず、printf
は で定義されており、 では定義されstdio.h
ていませんiostream
。を使用して C++ の方法で実行したい場合は、代わりiostream
に thencout << "Blabla " << var << endl;
を使用する必要があります。
pthread_create
次に、間違った引数で呼び出しています。定義どおりであり、配列ではathread
ありbthread
ませんが、配列として使用します。が最初の引数としてpthread_create
期待されており、あなたが提供しているため、なぜこれがコンパイルされるのか完全にはわかりません。コードがコンパイルされると、実行時にクラッシュする可能性が高くなります。pthread_t*
*pthread_t
第 3 に、加算スレッドに参加していません。これは、加算スレッドが終了する前に印刷スレッドが開始される可能性があることを意味します。
第 4 に、ローカル変数に合計しています。グローバルなものに合計することになっています。ミューテックスなどでアクセスを保護することを忘れないでください。
第 5 に、スレッド ルーチンへの引数が間違っています。値自体ではなく値へのポインターを渡し、後でポインターを値自体として再解釈します。(void *)real[y]
ほとんどの場合、 ではなくを使用することをお勧めします(void *)&real[y]
。へのキャストは、すべてのシステムで機能long
するvoid *
わけではないことに注意してください。Mac OS X では、long
との両方void *
が同じ長さ (32 ビットまたは 64 ビット) ですが、これは一般的に当てはまりません。
編集: あなたのコードは OS X でもコンパイルされません:
$ g++ -o t.x t.cpp
t.cpp: In function ‘int main(int, const char**)’:
t.cpp:37: error: cannot convert ‘_opaque_pthread_t’ to ‘_opaque_pthread_t**’ for argument ‘1’ to ‘int pthread_create(_opaque_pthread_t**, const pthread_attr_t*, void* (*)(void*), void*)’
t.cpp:40: error: cannot convert ‘_opaque_pthread_t’ to ‘_opaque_pthread_t**’ for argument ‘1’ to ‘int pthread_create(_opaque_pthread_t**, const pthread_attr_t*, void* (*)(void*), void*)’
$ clang -o t.x t.cpp
t.cpp:37:5: error: no matching function for call to 'pthread_create'
pthread_create(athread[y],NULL,Add,(void *)&real[y]);
^~~~~~~~~~~~~~
/usr/include/pthread.h:304:11: note: candidate function not viable: no known
conversion from 'struct _opaque_pthread_t' to 'pthread_t *' (aka
'_opaque_pthread_t **') for 1st argument;
int pthread_create(pthread_t * __restrict,
^
t.cpp:40:5: error: no matching function for call to 'pthread_create'
pthread_create(bthread[y],NULL,Print,(void *)&real[y]);
^~~~~~~~~~~~~~
/usr/include/pthread.h:304:11: note: candidate function not viable: no known
conversion from 'struct _opaque_pthread_t' to 'pthread_t *' (aka
'_opaque_pthread_t **') for 1st argument;
int pthread_create(pthread_t * __restrict,
^
2 errors generated.
XCode が提供しているエラー メッセージも表示されませんか?