2011-06-25 20 views
2

我有类似于下面的代码。下面的代码给出了SIGSEGV并指向list :: push_back。这是使用boost线程列表的正确方法吗?助推线程列表

struct mythread{ 
    static void myfunc() { 
     while(1){ } 
    } 
}; 

int f(){ 
    std::list<boost::thread *> pool; 
    pool.push_back(new boost::thread(mythread::myfunc)); 
} 

环境:Ubuntu上的gcc 4.4.5,与libboost_thread.a和-lpthread链接。我没有使用C++ 0x标志。

问候,

Chubsdad

注2:我也得到SIGSEGV的代码

pool.push_back(new boost::thread(NULL); 
+0

什么的堆栈跟踪看起来像? –

+0

list :: push_back calls list :: _ M_Insert which called _List_node_base :: hook。 SIGSEGV是从钩子成员函数 – Chubsdad

回答

2

尝试采取的函数指针的地址:

pool.push_back(new boost::thread(&mythread::myfunc)); 
+0

不是。没有帮助。我再次遇到崩溃。 – Chubsdad

+0

好的废话。我只是试着在我的机器上编译你的代码(g ++ 4.4.1,ubuntu 9.10),并且它的工作没有出现问题。我真的不能说我知道发生了什么事。 – Mikola