加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何从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每次修改不同的位置,我会遇到麻烦吗?
例如,“线程0仅修改数组[0],线程1仅修改数组[1],依此类推”.

解决方法

这些只是将 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;
}

您在帖子中有另一个我错过的问题:

And if I have a static array of 10 positions and 10 pthreads modifiying different positions each time,will I have trouble?

这是否会给您带来麻烦可能取决于数组元素类型和您的硬件架构.在实践中,我没有观察到x86体系结构上存在的问题,因为在机器字边界上对齐的数组元素.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读