Muz*_*ain 3 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);
}
Run Code Online (Sandbox Code Playgroud)
所以,在这里,
pthread_create(&tid, &attr, test, (void*)&temp);
Run Code Online (Sandbox Code Playgroud)
为什么我们需要将整数类型转换为void*.为什么不直接传递整数?同样地,而不是
void* test(void* data);
Run Code Online (Sandbox Code Playgroud)
为什么不这样,
void* test(int data);
Run Code Online (Sandbox Code Playgroud)
首先,pthread_create()是一个C函数,而不是C++,所以C++ 在这一点上可以做的所有事情- 例如使用模板的东西 - 是不可能的.C程序也想启动线程.
(实际上,较新版本的C++有自己的线程接口.)
所以,C
我们的想法是拥有一个通用接口,因此您可以将任何内容传递给任何要调用的函数pthread_create(),并返回任何内容.
您不能传递值,因为您不知道参数的大小.难道int,double或struct something?所以你需要通过指针传递.
既然你不知道参数的类型(和返回值),你也可以使用void *"匿名"指针类型.在调用线程函数(test()在本例中)中,您确实知道参数的类型和返回值,因此您可以void *根据需要进行转换.
| 归档时间: |
|
| 查看次数: |
1662 次 |
| 最近记录: |