Estoy tratando de acceder a los miembros de mi estructura que se pasa a una función que fue llamada por un proceso pthread. Es simple, pero por alguna razón no puedo entenderlo.

He intentado usar data.count o data-> count, pero supongo que necesito lanzar mi puntero de datos a mi estructura que le pasó. Estoy muy confundido, pero estoy seguro de que la solución es simple. por favor ayuda. Aquí está la estructura, seguida de la llamada pthread y la función que se está utilizando. Gracias. Puedo agregar que BUFFER_SIZE se define globalmente, por lo que eso no es un problema, según mi entendimiento. No compartí eso en el código.

typedef struct {
        int buffer[BUFFER_SIZE];
        int count;
        int top;
        int next;
        pthread_mutex_t count_lock;
} prodcons;

//this is in main.c
prodcons pc_nums;

//create producer thread
pthread_create(&tid, &attr, *producer, &pc_nums);

//This is the runner function, pthread call this
void *producer(void *data)
{
        //set up data structure to be shared between producer and       consumer
        int number;
        prodcons primeNums;
        pc_init(&primeNums);

        //call consumer thread
        pthread_t tid;
        pthread_attr_t attr;
        pthread_attr_init(&attr);
        pthread_create(&tid, &attr, *consumer, &primeNums);

        while (data->count < BUFFER_SIZE)
        {
                number = pc_pop(data);
                factor2pc(&primeNums, number);
        }
}

Solo espero acceder a las variables en mi estructura pasadas por mi pthread_create, pero obtengo el error: 'count' no es parte de alguna estructura o unión. Realmente necesito averiguar cómo hacer que los datos apunten a mi estructura para poder acceder a sus miembros

0
SuperCjp23 20 oct. 2019 a las 05:08

1 respuesta

La mejor respuesta

Versión corta: Sí, tienes que enviar 'datos' al tipo correcto:

void producer(void *data_p) {
    prodcons *data = data_p ;
    ... rest of your code ...
} ;

Nota al margen: tenga cuidado con la clase de almacenamiento de 'pc_nums'. En el programa de subprocesos múltiples, es posible que el principal se termine a sí mismo (pthread_exit), o que se liberen las variables automáticas. No queda claro en su ejemplo cómo se asignan los productos. Si prodcons es una variable 'auto' (local), considere hacerla estática o use malloc / calloc para asignarle espacio de pila, si es necesario.

0
dash-o 20 oct. 2019 a las 07:10