Προς το περιεχόμενο

Ερωτηση για νηματα


MauriDalia

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας,

 

Εχω δημιουργησει με την χρηση sockets εναν server και εναν client.Προκειμενου να υποστηρίζω παράλληλη επεξεργασια εχω βάλει νήματα.Στο προγραμμα του server για κάθε client που συνδέεται ,δημιουργείται και ένα νήμα.Η συνάρτηση accept είναι μέσα σε μια while μέσα στην οποία καλώ την pthread_create και την pthread_join

 

Ομως, εστω οτι συνδεω τον πρώτο client.Τοτε αν παω να συνδεθω και μέσω ενος 2ου client αυτος μπλοκαρει πριν γίνει accepted και μπει στην while και όταν τελειωσει ο πρωτος τοτε συνδεεται.

 

Κανονικα ομως δεν πρεπει να τρέχουνε παραλληλα τα νήματα?

 

Ευχαριστω

>
 while(1)                 
       { 
               printf("Server waiting for connections\n");
               ns=accepting(sd,sockaddr,addrlen);                    //Kaloume ti sunarthsh accepting h opoiaapodexetai gia connect twn clients 
                                                                     //pou briskontai stin oura anamonis
               printf("Accepted...\n");
			bzero(buf,sizeof(buf));
          
			
               /* Initialize and set thread detached attribute */
                pthread_attr_init(&attr);
                pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
       		 t++;    //Auksanw to id tou nhmatos
                printf("Creating thread %d\n", t);
			 
                rc = pthread_create(&threads[t],&attr, thread_function,(void *)& arg[t]);
                if (rc)
                   {
                       printf("ERROR; return code from pthread_create() is %d\n", rc);
                       exit(-1);
                   }
		
               /* Free attribute and wait for the other threads */
                pthread_attr_destroy(&attr);
			 rc = pthread_join(threads[t], &status);
                if (rc)
                   {
                       printf("ERROR; return code from pthread_join() is %d\n", rc);
                       exit(-1);
                   }
                printf("Completed join with thread %d status= %ld\n",t, status);
	         close(ns);   
}

Δημοσ.

Η join περιμένει το thread να τελειώσει την εκτέλεση της συνάρτησης που του έδωσες. Βασικά πρέπει να μαζεψεις όλα τα thread_ids και να κάνεις join έξω από το loop.

Δημοσ.
Η join περιμένει το thread να τελειώσει την εκτέλεση της συνάρτησης που του έδωσες. Βασικά πρέπει να μαζεψεις όλα τα thread_ids και να κάνεις join έξω από το loop.

 

Τα threadids πρεπει να τα παιρνω με την pthread_self και να τα αποθηκευω σε εναν πινακα pthread_t threads[NUM_THREADS] και το πρωτο ορισμα της join τι θα ειναι?Πρεπει να βαλω καπου και αυτη threads[t]=pthread_self(void);

Δημοσ.

Όπως το κάνεις παραπάνω:

>
rc = pthread_join(threads[t], &status);

Μόνον τον πίνακα threads χρειάζεσαι.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...