c++ - 如何从 C++ 中的 pthread 返回 double 值?

标签 c++ concurrency pthreads pthread-join

阅读此主题后: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/

相关文章:

java - 使用中断Java Runnable并运行清理的首选方法是什么?

c++ - 使用多线程编程,不打印预期输出

c - 线程无法计数,给出错误的结果

c++ - 当我使用 '|' 或 '<' 时到底发生了什么,c++

c++ - 模板类中的静态成员

c++ - 多次使用 strtok_s

c++ - 如何将带有参数的方法传递给线程以执行?

C++模板参数类型推断

java - ConcurrentHashMap 使用线程 A 进行remove(),同时使用线程 B 进行迭代

在返回 Go Runtime 之前,Cgo 在 x_cgo_notify_runtime_init_done 中被阻塞