【发布时间】:2018-12-22 09:34:40
【问题描述】:
我有一个关于在 C 中创建线程的示例代码。在我创建线程的部分,我不知道所有 void 指针的用途,以及它们的作用。
void* pthread_function(int thread_id) {
pthread_mutex_lock(&mutex);
printf("I'm thread number %d in mutual exclusión\n",thread_id);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main(int argc,char** argv) {
// Init mutex
pthread_mutex_init(&mutex,NULL);
// Create threads
pthread_t thread[NUM_THREADS];
long int i;
for (i=0;i<NUM_THREADS;++i) {
pthread_create(thread+i,NULL,(void* (*)(void*))pthread_function (void*)(i));
}
}
指针在这里是如何工作的?
pthread_create(thread+i,NULL,(void* (*)(void*))pthread_function (void*)(i));
感谢您的帮助。
【问题讨论】:
-
您是否注意到应该返回指向 void 的指针的函数没有返回语句?我建议忽略这种代码并寻找其他地方。
-
关注演员
(void* (*)(void*))和演员pthread_function以及它所采用的参数类型(以及它与原始演员的不同之处),以及最终演员的制作方式工作。将其与手册页中pthread_create的原型进行比较。 -
@DavidC.Rankin 我认为第一个 (void* ) 这在手册页中的 pthread_create 中很常见。我猜第二个 ( * ) 是指向 pthread_function 的指针。第三个(void*))是我不太明白的那个。
-
这段代码甚至无法编译,并且由于多种原因通常写得不好。就像@Yunnosch 写的那样,找到一个更好的例子。
-
好吧,我想我不应该在这上面浪费时间。我会寻找其他的例子。虽然我还是想了解
(void* (*)(void*))背后的意图是什么。
标签: c pointers void-pointers