首先,printf
是定义在stdio.h
而不是在iostream
。如果您想以 C++ 方式使用iostream
,cout << "Blabla " << var << endl;
则应改为使用。
其次,你pthread_create
用错误的论据打电话。正如定义的那样athread
,bthread
不是数组,但您可以这样使用它们。我不完全确定为什么这甚至会编译,因为pthread_create
期望pthread_t*
作为第一个参数并且您正在提供*pthread_t
. 如果代码编译过,它很可能会在运行时崩溃。
第三,您没有加入加法器线程。这意味着您的打印线程可以在加法器线程完成之前启动。
第四,您正在对局部变量求和。你应该总结成一个全球性的。不要忘记通过互斥锁或其他东西保护对它的访问。
第五,线程例程的参数是错误的。您将指针传递给值而不是值本身,然后将指针重新解释为值本身。您很可能想要使用(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 提供的错误消息吗?