Итак, у меня есть программа, которая должна иметь потоки потребителя и производителя.
В основном методе я хочу вызвать init_consumers()
, который вызовет ptread_init()
Вотнекоторый код:
int init_consumers(char *quantity, pthread_t **cons, void *complex_obj)
{
//seting the limit acording to "quantity"
for (; i < limit; i++)
pthread_create(cons[i], NULL, &consumer, &complex_obj);
return(i);
}
main
:
#include <pthread.h>
#define MAX_PROD 50
#define MAX_CONS 50
///main entry point of the program
int main(int argc, char *argv[])
{
pthread_t prod[MAX_PROD];
pthread_t cons[MAX_CONS];
struct complex_obj *co;
//some code
co = create_cplx_obj();
//complex object manipulation code
init_producers(argv[2], &prod, co);
init_consumers(argv[3], &cons, co);
//more code
exit(0);
}
argv[2]
и argv[3]
- сколько производителей / потребителей хочет пользователь.
Такжеподпись потока: void *producer(void *args);
У меня все еще возникают проблемы с *
и &
, поэтому моя проблема заключается в выполнении вызова метода и подписи.
Ошибка, которую я получал, была
n_prod_n_cons.c:158:6: note: expected ‘pthread_t * {aka long unsigned int *}’ but argument is of type ‘pthread_t (*)[50] {aka long unsigned int (*)[50]}’ int init_producers(char *quantity, pthread_t *prod, void *complex_obj)