我正在处理生产者/消费者并发问题。问题是我在尝试创建第一个线程后立即抛出了一个段错误。
相关代码:
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语句,因为它的第一行永远不会被执行,这使我相信永远不会创建该线程。
非常感谢任何帮助。
答案 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包装在一个结构中,或者你打算以后增长这个类?