创建pthread后立即进行Segfault

时间:2010-10-11 19:12:50

标签: c++ multithreading pthreads

我正在处理生产者/消费者并发问题。问题是我在尝试创建第一个线程后立即抛出了一个段错误。

相关代码:

customer是一个声明为:

的结构
struct pr2_customer
{
    pthread_t customer_id;
};
typedef struct pr2_customer customer;

客户是一个c ++向量,声明如下:

vector<customer> customers;

创建主题:

for(int i = 0; i < ncustomers; i++)
{
    cout<<"creating a customer\n";
    pthread_create(&customers[i].customer_id, &attr, customerAction, (void*)i);
}

输出:

创建客户
段错误

customerAction有一个cout语句,因为它的第一行永远不会被执行,这使我相信永远不会创建该线程。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

在我看来,您没有在customers中预留任何空格。我认为这就是你所需要的:

vector<customer> customers(ncustomers);

答案 1 :(得分:1)

由于你使用的是STL向量,你应该使用方便的vector :: iterator迭代你的向量而不关心它的大小。

vector<customer>::iterator it;

然后像这样迭代它。

for (it = customers.begin(); it != customers.end(); it++)

答案 2 :(得分:0)

您需要为您的客户分配一些空间。您只声明了一个客户向量,但该向量为空。

答案 3 :(得分:0)

很难理解为什么你是segfaulting,因为你似乎只给了一个片段。你的矢量在哪里生活,它实际上还有任何成员吗? ncustomers来自哪里?

我甚至不确定你为什么要将pthread_id包装在一个结构中,或者你打算以后增长这个类?