我刚刚开始使用操作系统课程。所以我要问的问题可能是一个幼稚的问题,但没关系。我目前正在学习多线程。这是我的问题:每当我们使用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);
答案 0 :(得分:5)
首先,pthread_create()
是一个 C 函数,而不是C ++,所以C ++ 可以做的所有事情 - 例如使用模板的东西 - 是不可能的。 C程序也想启动线程。
(实际上,较新版本的C ++有自己的threading interface。)
所以,C。
我们的想法是拥有通用接口,因此您可以将任何传递给任何函数,以便pthread_create()
调用,返回。
您无法通过价值传递,因为您不知道参数的大小。是int
,double
还是struct something
?所以你需要通过指针传递。
由于您不知道参数(和返回值)的类型,您使用void *
," anonymous"指针类型。在被调用的线程函数(在本例中为test()
)中,您做知道参数的类型和返回值,因此您可以根据需要从void *
转换为dependencies {
//...
compile 'it.neokree:MaterialTabs:0.11'
}
。