Я пытаюсь создать pthread, и я смущен аргументами, необходимыми для его создания.pthread_create не принимает аргументы
Я пытаюсь передать несколько аргументов в функцию ввода для pthread, и я инкапсулировал это в структуру. Однако pthread_create
не принимает его.
Вот соответствующие части моего кода:
Customer_Spawn_Params *params = (Customer_Spawn_Params*) malloc(sizeof(Customer_Spawn_Params));
params->probability = chance;
params->queue = queue;
pthread_t customer_spawn_t;
if (pthread_create(&customer_spawn_t, NULL, enqueue_customers, ¶ms)) {
}
А вот Customer_Spawn_Params
структура:
typedef struct {
Queue *queue;
double probability;
} Customer_Spawn_Params;
Наконец, вот enqueue_customers()
, которая принимает указатель на Customer_Spawn_Params
структуры:
void *enqueue_customers(Customer_Spawn_Params *params) {
int customer_id = 0;
double probability = params->probability;
Queue *queue = params->queue;
while(true) {
sleep(1);
bool next_customer = next_bool(probability);
if (next_customer) {
Customer *customer = (Customer*) malloc(sizeof(Customer));
customer->id = customer_id;
enqueue(queue, customer);
customer_id++;
}
}
return NULL;
}
'Однако, pthread_create не принимает его.' .. Как вы пришли к такому выводу? –
При вызове 'pthread_create' вы передаете последний указатель (аргумент функции потока) в качестве указателя * на указатель *. Если вы не измените свою функцию потока, у вас будет [* неопределенное поведение *] (http://en.wikipedia.org/wiki/Undefined_behavior). –
введите свой параметр в (void *), и ваш поток proc должен принять void * – dvhh