阅读此主题后:How to return a value from thread in C关于如何从 pthread 返回整数值我测试过它是否可以用于 double ,但它没有。有没有办法像原始线程中描述的那样从 pthread 进程返回 double 、长整数或字符串,而不是返回整数 42?
如果是怎么办?
如果我有一个包含 10 个位置的静态数组和 10 个 pthread 每次修改不同的位置,我会遇到麻烦吗? 一个例子就像“线程 0 只修改数组 [0],线程 1 只修改数组 [1] 等等”。
最佳答案
线程只需为您希望它返回的结果动态分配内存:
void *myThread(void*)
{
double* result = (double*) malloc(sizeof(double));
*result = 42.0;
return result;
}
任何应该收集该结果的东西都会使用适当的转换取消引用返回的指针(毕竟这是带有 void*
的 C),然后释放内存:
// calling thread (or whatever will collect the value)
void* thread_result;
int err = pthread_join( thread_handle, &thread_result);
double dbl = *(double*) thread_result;
free(thread_result);
作为替代方案,任何创建线程的东西都可以将指针传递给线程应该放置的位置,结果是 void*
参数给线程(如果线程需要更多,可能作为结构的一部分而不仅仅是那一点信息)。如果您有理由避免动态内存分配,这可能会让您避免动态内存分配,但它可能会使数据的所有权和生命周期的管理变得更加复杂。
关于c++ - 如何从 C++ 中的 pthread 返回 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350776/