我发现两行代码含义不明确。
for (i = 0; i < NTHREADS; i++) {
#ifndef THREAD_POINTER
pthread_create(&thread_id[i], NULL, thread_function, NULL);
#endif
#ifdef THREAD_POINTER
pthread_create(&thread_id[i], NULL, &thread_function, NULL);
#endif
}
这是两行代码。它们的行为与创建NTHREADS线程数相同。但是第一个函数用函数名定义,第二个函数用函数名指针定义。我认为它必须是一个函数指针,以便可以动态生成线程。这两个必须是POSIX库中的两个不同的功能。我仍然不明白这是如何工作的。它们与语法完全不同,但具有相同的函数名称。据我所知,函数名只允许在C ++中相同,但在C中不允许。
如果函数名(thread_function)和函数名指针(&amp; thread_function)都是void *类型,则第二个应该为void **。那么为什么系统表现相同。
P.S。这两行代码在MAC OS X 10.10.3上使用clang编译器进行了测试。