Pthread_signal passaggio di parametri non corretto

di il
2 risposte

Pthread_signal passaggio di parametri non corretto


static void *myfun (void *arg){
	int exitvalue = 17;	
	pthread_exit(&exitvalue);
}
int main (void) {
	int i,status;
	pthread tid[N];
	void *ret;
	for(i = 0; i < N; i++)
		pthread_create(&tid[i], NULL, &myfun, &i);
	
	for(i = 0; i < N; i++){	
		pthread_join(tid[i], &ret);
		status = *(int *) ret;
		printf("Thread #%d ends: %d status\n",i,status);
	}
Per N = 10 mi da questo output
Thread #0 ends: 1 status
Thread #1 ends: 1 status
Thread #2 ends: 1582507208 status
Thread #3 ends: 1 status
Thread #4 ends: 1 status
Thread #5 ends: 1 status
Thread #6 ends: 1582507208 status
Thread #7 ends: 1582507208 status
Thread #8 ends: 1 status
Thread #9 ends: 1 status
Ma gli status dovrebbero essere tutti 17.

2 Risposte

  • Re: Pthread_signal passaggio di parametri non corretto

    Vale il discorso sul post precedente, in più non puoi restituire un addr di una variabile definita localmente nella myfun. Ti Allego un esempio funzionante:
    
    #include <pthread.h>
    #include <stdio.h>
    
    #define MAXTHREADS 20
    
    struct thread_info 
    {
      pthread_t id;
      int my_id;
      int valore;
    };
    
    static void *myfun (void *arg){
       
       struct thread_info *ps=(struct thread_info *) arg;
       int *exitvalue; 
       
       exitvalue=&ps->valore;
       printf ("Thread #%d START with val=%d\n",ps->my_id,*exitvalue);
       
       pthread_exit(exitvalue);
    }
    
    int main (void) {
       int i,status;
       struct thread_info tinfo[MAXTHREADS];
       
       void *ret;
       for(i = 0; i < MAXTHREADS; i++)
       {
         tinfo[i].my_id=i;
         tinfo[i].valore=i*10;
         pthread_create(&tinfo[i].id, NULL, &myfun, &tinfo[i]);
       }
      
       for(i = 0; i < MAXTHREADS; i++){   
          pthread_join(tinfo[i].id, &ret);
          status = *(int *) ret;
          printf("Thread #%d ends: %d status\n",i,status);
       }
       
       return 0;
    }
    
  • Re: Pthread_signal passaggio di parametri non corretto

    Grazie!!!
    ho capito veramente un sacco di cose grazie hai tuoi due esempi.
Devi accedere o registrarti per scrivere nel forum
2 risposte