【发布时间】:2013-03-11 23:49:15
【问题描述】:
阅读此线程后:How to return a value from thread in C 关于如何从 pthread 返回整数值我测试了它是否可以用于双精度,但它没有。有没有办法像原始线程中描述的那样从 pthread 进程返回双精度、长整数或字符串,而不是返回整数 42?
如果是怎么办?
如果我有一个包含 10 个位置的静态数组和 10 个 pthreads 每次修改不同的位置,我会遇到麻烦吗? 一个例子就像“线程 0 只修改数组 [0],线程 1 只修改数组 [1] 等等”。
【问题讨论】:
-
Steve Jessop 的答案是您想要使用的答案。 stackoverflow.com/a/2251472/315052
-
史蒂夫的回答不是我想要的。首先是因为它仍然返回一个 int,其次是因为它使用 pthread_exit() 来退出一个 pthread,这是一个可怕的、可怕的解决方案,应该避免。我的代码有一个非常独特的版本,它通过将 int 转换为 uintptr_t 来处理整数,但据我所知,没有什么可以从 double 转换为指针。
-
你确定要走这条路吗?如果您使用的是 64 位系统,那么(幸运的是) double 和 void* 都有 8 个字节,因此您可以获得所有返回的位...如果您坚持这样做,我会发布答案。不过,您可能应该只管理线程之间的数据访问。
-
@Flame_Phoenix:您不能将
int更改为double吗?你意识到他正在传递一个指向int的指针,对吧?不将 int 填充到指针的值中。所以只需将指针传递给双精度。无论您需要做什么才能不使用pthread_exit(比如说,让函数完成),都这样做。 -
忘记 pthreads。使用现代编译器,并使用 C++ 11。(G++ 和 Clang 有很好的支持,一些顶级专有的也有很好的支持。)
标签: c++ concurrency pthreads pthread-join