为什么" start_routine"在POSIX Thread中使用(void *)(* start_routine)(void *)和(void *)(start_routine)(void *)

时间:2015-05-10 14:36:52

标签: c pthreads

我发现两行代码含义不明确。

         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编译器进行了测试。

0 个答案:

没有答案