【发布时间】:2016-05-04 14:09:03
【问题描述】:
我刚刚开始了操作系统课程,目前我们正在学习多线程,所以我对这一切都很陌生。
这是我的问题:每当我们使用 pthread_create() 创建线程时,为什么我们需要传递我们希望线程以 void* 类型运行的函数的参数?
例如,考虑以下代码。
void *test(void* data)
{
...
}
int main()
{
int temp;
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&tid, &attr, test, (void*)&temp);
}
所以,在这里,
pthread_create(&tid, &attr, test, (void*)&temp);
为什么我们需要将整数类型强制转换为 void*。为什么不按原样传递整数?同样,而不是
void* test(void* data);
为什么不这样,
void* test(int data);
【问题讨论】:
-
想想如何声明
pthread_create。您将如何以在 C 中也适用的方式为所有类型声明它? -
如果你想传入两个
ints,或者任何其他组合怎么办? -
pthreads 是一个 C api。没有重载,没有模板等。必须有一个固定的接口,可以允许调用各种函数。当你使用 C++ 线程时,你 really do pass the arguments as their real types.
标签: c++ multithreading operating-system