为什么我们在pthread_create中将函数参数作为void *传递?

时间:2016-01-27 14:48:47

标签: c++ multithreading operating-system

我刚刚开始使用操作系统课程。所以我要问的问题可能是一个幼稚的问题,但没关系。我目前正在学习多线程。这是我的问题:每当我们使用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);

1 个答案:

答案 0 :(得分:5)

首先,pthread_create()是一个 C 函数,而不是C ++,所以C ++ 可以做的所有事情 - 例如使用模板的东西 - 是不可能的。 C程序也想启动线程。

(实际上,较新版本的C ++有自己的threading interface。)

所以,C。

我们的想法是拥有通用接口,因此您可以将任何传递给任何函数,以便pthread_create()调用,返回

您无法通过价值传递,因为您不知道参数的大小。是intdouble还是struct something?所以你需要通过指针传递。

由于您不知道参数(和返回值)的类型,您使用void *," anonymous"指针类型。在被调用的线程函数(在本例中为test())中,您知道参数的类型和返回值,因此您可以根据需要从void *转换为dependencies { //... compile 'it.neokree:MaterialTabs:0.11' }