从包装类调用pthread_create时出现分段错误

时间:2014-03-16 23:51:59

标签: c++ linux class pthreads

我正在编写Java样式的Thread类而且我被卡住了,因为当我的包装器函数将接收到的无效指针转换为Runnable指针时,它会导致分段错误,因为程序不知道哪个运行( )打电话。 我尝试了不同的强制转换,我试图传递struct,包含指向Runnable的指针,但在所有情况下它都像俄罗斯轮盘一样:几乎100%的段错误,但也可能运行良好,尤其是在gdb的第一次运行时。

#include <pthread.h>
class Runnable {

    public:
        virtual void run() {};
        virtual ~Runnable() {};

};

static void* __outerwrapper(void* arg) {
    ( reinterpret_cast<Runnable*>(arg) )->run();
    pthread_exit(NULL);
}

class Thread : public Runnable {

    public:
        Thread() : target(this) {};
        Thread(Runnable* target) : target(target) {};
        void start() {
            pthread_create(&(this->thread), NULL, __outerwrapper, this->target);
        }
    private:
        Runnable* target;
        pthread_t thread;

};

int main () {
    Thread t;
    t.start();
}

我想使用该界面,但为了使其有效,我需要更改哪些内容?

0 个答案:

没有答案