gpt4 book ai didi

C++ 错误创建 n 个 pthreads-

转载 作者:太空宇宙 更新时间:2023-11-03 10:27:22 26 4
gpt4 key购买 nike

在本应采用 int k 并创建 k 个 pthreads 的函数中出现以下错误:

cse451.cpp:95:60:错误:从‘void*’到‘pthread_t* {aka long unsigned int*}’的无效转换[-fpermissive]

cse451.cpp:97:54: 错误:void 表达式的使用无效

我觉得它与 foo() 函数有关(此时它仅用作占位符 foo(){} )

相关代码如下(第95行是pthread_t *threads……第97行是err=pthread_create……)

void createThreads(int k){
int numThreads = k;
int i = 0;
int err = 0;
pthread_t *threads = malloc(sizeof(pthread_t) * numThreads);
for(i = 0;i<numThreads;i++){
err = pthread_create(&threads[i], NULL, foo(), NULL);
if(err != 0){
printf("error creating thread\n");
}
}
}

void foo(){}

最佳答案

第一个问题是您正在尝试使用 C++ 编译器编译 C。此转换:

pthread_t *threads = malloc(sizeof(pthread_t) * numThreads);

malloc 返回的非类型化 void* 指针到类型化的 pthread_t* 指针,在 C 中是允许的,但需要强制转换C++。

pthread_t *threads = static_cast<pthread_t*>(malloc(sizeof(pthread_t) * numThreads));

但是如果这意味着是 C++,你最好用

std::vector<pthread_t> threads(numThreads);

所以你不需要自己处理内存。您可能还想看看标准线程库,它比 POSIX 线程更友好。

第二个问题是pthread_create的参数应该是函数指针foo,而不是调用函数foo()的结果。您的函数类型也有误;它必须接受并返回 void*

void *foo(void*);

它将您提供的参数传递给 pthread_create(在本例中为 NULL),并返回一个指向您加入线程时想要接收的任何内容的指针(return NULL; 如果你不想返回任何东西)。

关于C++ 错误创建 n 个 pthreads-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com