Thread che non parte

di il
2 risposte

Thread che non parte

Salve, sto iniziando a programmare con i thread... ho scritto un programma produttore-consumatore... il produttore inserisce un valore in una lista usata come buffer... Il consumatore prende un valore dalla lista e lo stampa su stdout. Il problema è che i thread non mi partono proprio... ho provato pure a far stampare subito qualcosa dentro la funzione del thread ma niente... ecco il programma:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>

typedef struct node{
		int info;
		struct node* next;} node_t;
		
void* produttore(void* arg);
void* consumatore(void* arg);
node_t* produci();
void inserisci(node_t* p);
node_t* estrai();
		

node_t* head = NULL;
pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

int main(){
	pthread_t prod, cons;
	int err;
	
	if ((err = pthread_create(&prod,NULL,&produttore,NULL)) != 0) printf("errore creazione produttore\n");
	if ((err = pthread_create(&cons,NULL,&consumatore,NULL)) != 0) printf("errore creazione consumatore\n");
	 
	return 0;
}

void* produttore(void* arg){
	node_t* p;
	while(1){
		p = produci();
		pthread_mutex_lock(&mtx);
		inserisci(p);
		pthread_cond_signal(&cond);
		pthread_mutex_unlock(&mtx);
		sleep(2);
	}
}
	
void* consumatore(void* arg){
	node_t* p;
	while(1){
		pthread_mutex_lock(&mtx);
		while (head == NULL){
			pthread_cond_wait(&cond, &mtx);
			printf("waken up!\n"); fflush(stdout);
		}
		p = estrai();
		pthread_mutex_unlock(&mtx);
		printf("%d\n", p->info);
		free(p);
	}
}

node_t* produci(){
	srand(time(NULL));
	int n = rand()%100;
	node_t* p = malloc(sizeof(node_t));
	p->info = n;
	p->next = NULL;
	return p;
}

void inserisci(node_t* p){
	node_t* aux = head;
	if (head == NULL) head = p; 
	else { 
		while (aux->next != NULL) aux = aux->next;
		aux = p;
	}
}

node_t* estrai(){
	node_t* aux = head;
	node_t* p;
	while (aux->next->next != NULL) aux = aux->next;
	p = aux->next;
	aux->next = NULL;
	return p;
}
	

2 Risposte

  • Re: Thread che non parte

    Ma la variabile

    err

    nei due casi di avvio del thread, quanto vale?
  • Re: Thread che non parte

    Vale in tutti e due i casi 0

    edit: ho provato anche a sostituire il codice di produttore e consumatore con una semplice printf, ma non stampa niente...

    edit2: ok, sono un idiota. Non avendo messo un ciclo nel main, è ovvio che il processo viene subito killato, di conseguenza pure i thread
Devi accedere o registrarti per scrivere nel forum
2 risposte