Segfault сразу после создания pthread - PullRequest
1 голос
/ 11 октября 2010

У меня проблема параллелизма производителя / потребителя, над которой я работаю.Проблема в том, что я получаю segfault сразу после попытки создать мой первый поток.

Соответствующий код:

customer - это структура, объявленная как:

struct pr2_customer
{
    pthread_t customer_id;
};
typedef struct pr2_customer customer;

customer - это вектор c ++, объявленный как:

vector<customer> customers;

Createпоток:

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

Вывод:

создание клиента
segfault

customerAction имеет оператор cout, поскольку его первая строка никогда не выполняется, что приводит меня ксчитаю, что нить никогда не создается.

Любая помощь очень ценится.

Ответы [ 4 ]

1 голос
/ 11 октября 2010

Поскольку вы используете векторы STL, вы должны использовать удобный вектор :: iterator для итерации по вашему вектору, не обращая внимания на его размер.1005 *

1 голос
/ 11 октября 2010

Что мне кажется, так это то, что вы не зарезервировали место в customers. Я думаю, что это то, что вам нужно:

vector<customer> customers(ncustomers);
0 голосов
/ 11 октября 2010

Трудно понять, почему вы находитесь в segfaulting, поскольку, кажется, вы дали только фрагмент кода. Где живет ваш вектор и есть ли в нем еще участники? Откуда приходят клиенты?

Я даже не уверен, почему вы заключаете свой pthread_id в структуру или вы собираетесь расширить этот класс позже?

0 голосов
/ 11 октября 2010

Вам нужно будет выделить место для ваших клиентов.Вы только что объявили вектор клиентов, но этот вектор пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...