如何从c中的pthread返回double值?
发布时间:2020-12-16 09:43:07 所属栏目:百科 来源:网络整理
导读:在阅读完这个帖子之后: How to return a value from thread in C关于如何从pthread返回一个整数值,我测试了它是否可以用于double,但它没有.有没有办法从pthread进程返回double,long或字符串,如原始线程中所述,而不是返回整数42? 如果有,怎么样? 如果我有
|
在阅读完这个帖子之后:
How to return a value from thread in C关于如何从pthread返回一个整数值,我测试了它是否可以用于double,但它没有.有没有办法从pthread进程返回double,long或字符串,如原始线程中所述,而不是返回整数42?
如果有,怎么样? 如果我有一个10个位置的静态数组和10个pthreads每次修改不同的位置,我会遇到麻烦吗? 解决方法
这些只是将
Steve Jessop’s C solution改为C.这些玩具示例(注意缺少错误检查)使用模板来明确如何更改代码以使用除double之外的某些类型.例如,如果在完成工作后需要返回多个值,则可以用类类型替换double.在实践中,可能会删除基类和模板,并且调用者将直接调用MyWorker的work()方法,而不是通过虚方法调用.
首先,使用pthread: #include <iostream>
#include <pthread.h>
class WorkerBase {
protected: virtual ~WorkerBase () {}
public: virtual void * work () = 0;
};
template <typename T>
struct Worker : public WorkerBase { T result; };
extern "C" void *invoke_worker (void *arg) {
return static_cast<WorkerBase *>(arg)->work();
}
struct MyWorker : public Worker<double> {
void * work () {
result = 4.2;
return 0;
}
};
int main () {
pthread_t t;
MyWorker w;
pthread_create(&t,invoke_worker,&w);
pthread_join(t,0);
std::cout << "result: " << w.result << std::endl;
return 0;
}
二,使用C 11 std :: thread: #include <iostream>
#include <thread>
class WorkerBase {
protected: virtual ~WorkerBase () {}
public: virtual void work () = 0;
static void invoke (WorkerBase *w) { w->work(); }
};
template <typename T>
struct Worker : public WorkerBase { T result; };
class MyWorker : public Worker<double> {
void work () { result = 4.2; }
};
int main () {
MyWorker w;
std::thread t(MyWorker::invoke,&w);
t.join();
std::cout << "result: " << w.result << std::endl;
return 0;
}
您在帖子中有另一个我错过的问题:
这是否会给您带来麻烦可能取决于数组元素类型和您的硬件架构.在实践中,我没有观察到x86体系结构上存在的问题,因为在机器字边界上对齐的数组元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
