如何从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体系结构上存在的问题,因为在机器字边界上对齐的数组元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |