Newsgroup: it.comp.os.linux.development
Titolo: PTHREAD_THREADS_MAX

Ho un problema con  i pthread in un ciclo da 0 a NUM_OF_THREADS-1 lancio
un pthread con pthread_create se NUM_OF_THREADS e > 255 gia al primo
giro pthread_create viene interrotta dal segnale SIG32 Real-time event
Come fa ha sapere gia' al primo ciclo che voglio creare piu' di 255
pthreads Un' altra cosa che non ho capito e' perche  PTHREAD_THREADS_MAX
non e' definita?? Ho incluso qui sotto il codice ciao grazie	  dario 
  #include <pthread.h> #include <stdlib.h> #include <errno.h> #include
<stdio.h> #include <unistd.h>  pthread_mutexattr_t attr; pthread_mutex_t
mutex; int global = 0;	#define NUM_OF_THREADS 256 #define BUF_SIZE 100 
void* routine(void*);  int main() {   pthread_t
pthread_id[NUM_OF_THREADS];   int i;   char* thread_return;   
pthread_mutexattr_init(&attr);	 pthread_mutex_init(&mutex, &attr);   
for(i=0; i < NUM_OF_THREADS; i++){     if((pthread_create(pthread_id+i,
NULL, routine, NULL)) != 0){	   perror("pthread_create failed");	
 exit(EXIT_FAILURE);	 }   }	  for(i=0; i < NUM_OF_THREADS; i++){	
if(pthread_join(pthread_id[i], (void**)&thread_return) != 0){	   
perror("pthread_join failed");	     exit(EXIT_FAILURE);     }	  
if(thread_return){	 printf("pthread %lu returned: %s\n",
pthread_id[i], thread_return);	     free(thread_return);     }     else
      printf("pthrad %ld returned NULL\n", pthread_id[i]);   }	 
if(pthread_mutex_destroy(&mutex) != 0){    
perror("pthread_mutex_destroy failed");     exit(EXIT_FAILURE);   }	
return 0; }  void* routine(void* arg) {   char *buffer = NULL;	 if(
((char*)buffer = malloc(sizeof(char) * BUF_SIZE)) == NULL){    
perror("malloc failed\n");     goto EXIT;   }  
if(pthread_mutex_lock(&mutex) != 0){	 perror("pthread_mutex_lock
failed");     free(buffer);	buffer=NULL;	 goto EXIT;   }  
global++;   sprintf( (char*)buffer,	       "thread ID: %d\n"       "
    variabile globale:%d",	      (int)pthread_self(), global);  
if(pthread_mutex_unlock(&mutex) != 0){	   perror("pthread_mutex_unlock
failed");     goto EXIT;   }  EXIT:   pthread_exit((void*)buffer); }  Ho
un problema con  i pthread in un ciclo da 0 a NUM_OF_THREADS-1 lancio un
pthread con pthread_create se NUM_OF_THREADS e > 255 gia al primo giro
pthread_create viene interrotta dal segnale SIG32 Real-time event Come
fa ha sapere gia' al primo ciclo che voglio creare piu' di 255 pthreads
Un' altra cosa che non ho capito e' perche  PTHREAD_THREADS_MAX non e'
definita?? Ho incluso qui sotto il codice ciao grazie	   dario   
#include <pthread.h> #include <stdlib.h> #include <errno.h> #include
<stdio.h> #include <unistd.h>  pthread_mutexattr_t attr; pthread_mutex_t
mutex; int global = 0;	#define NUM_OF_THREADS 256 #define BUF_SIZE 100 
void* routine(void*);  int main() {   pthread_t
pthread_id[NUM_OF_THREADS];   int i;   char* thread_return;   
pthread_mutexattr_init(&attr);	 pthread_mutex_init(&mutex, &attr);   
for(i=0; i < NUM_OF_THREADS; i++){     if((pthread_create(pthread_id+i,
NULL, routine, NULL)) != 0){	   perror("pthread_create failed");	
 exit(EXIT_FAILURE);	 }   }	  for(i=0; i < NUM_OF_THREADS; i++){	
if(pthread_join(pthread_id[i], (void**)&thread_return) != 0){	   
perror("pthread_join failed");	     exit(EXIT_FAILURE);     }	  
if(thread_return){	 printf("pthread %lu returned: %s\n",
pthread_id[i], thread_return);	     free(thread_return);     }     else
      printf("pthrad %ld returned NULL\n", pthread_id[i]);   }	 
if(pthread_mutex_destroy(&mutex) != 0){    
perror("pthread_mutex_destroy failed");     exit(EXIT_FAILURE);   }	
return 0; }  void* routine(void* arg) {   char *buffer = NULL;	 if(
((char*)buffer = malloc(sizeof(char) * BUF_SIZE)) == NULL){    
perror("malloc failed\n");     goto EXIT;   }  
if(pthread_mutex_lock(&mutex) != 0){	 perror("pthread_mutex_lock
failed");     free(buffer);	buffer=NULL;	 goto EXIT;   }  
global++;   sprintf( (char*)buffer,	      "thread ID: %d\n"       " 
   variabile globale:%d",	     (int)pthread_self(), global);  
if(pthread_mutex_unlock(&mutex) != 0){	   perror("pthread_mutex_unlock
failed");     goto EXIT;   }  EXIT:   pthread_exit((void*)buffer); }   

> Ho un problema con  i pthread in un ciclo da 0 a
[cut]
  Scusate ho sbagliato a postare , col copia ed incolla
  ho perso i n (penso) ci riprovo .
Ho un problema con  i pthread in un ciclo da 0 a NUM_OF_THREADS-1 
lancio	un pthread con pthread_create 
se NUM_OF_THREADS e > 255 
allora gia al primo giro 
pthread_create viene interrotta dal segnale SIG32 Real-time event
  Ma come fa ha sapere gia' al primo ciclo che voglio creare piu' di 255
pthreads ???
Un' altra cosa che non ho capito e' perche  PTHREAD_THREADS_MAX
  non e' definita in <pthread.h>
forse lo trovo in <limits.h> o simili ??
  Ho incluso qui sotto il codice 
  ciao grazie	  
  dario 
#include <pthread.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
pthread_mutexattr_t attr;
pthread_mutex_t mutex;
int global = 0;
#define NUM_OF_THREADS 256 
#define BUF_SIZE 100 
void* routine(void*);  
int main() {   
  pthread_t pthread_id[NUM_OF_THREADS];
  int i;
  char* thread_return;
  pthread_mutexattr_init(&attr);
  pthread_mutex_init(&mutex, &attr);
  for(i=0; i < NUM_OF_THREADS; i  ){
    if((pthread_create(pthread_id i, NULL, routine, NULL)) != 0){
      perror("pthread_create failed");	
      exit(EXIT_FAILURE);
    }
  }
  for(i=0; i < NUM_OF_THREADS; i  ){	
    if(pthread_join(pthread_id[i], (void**)&thread_return) != 0){	 
      perror("pthread_join failed");
      exit(EXIT_FAILURE);
    }	  
    printf("pthread %lu returned: %sn", pthread_id[i],
(thread_return)?thread_return:NULL);
    if(thread_return)
      free(thread_return);
  }
  if(pthread_mutex_destroy(&mutex) != 0){    
    perror("pthread_mutex_destroy failed");
    exit(EXIT_FAILURE);
  }	
  return 0;
}
void* routine(void* arg) {
  char *buffer = NULL;
  if((buffer = malloc(sizeof(char) * BUF_SIZE)) == NULL){    
    perror("malloc failedn");
    goto EXIT;
  }  
  if(pthread_mutex_lock(&mutex) != 0){
    perror("pthread_mutex_lock failed");
    free(buffer);
    buffer=NULL;
    goto EXIT;
  }  
  global  ;
  sprintf( buffer, "thread ID: %lun"
	   " variabile globale:%d",


   for(i=0; i < NUM_OF_THREADS; i  )
non penso che tu volessi degli equivalenti di
while(1)
vero?
-- 
-=Riccardo Galli=-
 _,e.
s~  ``
 ~@.   ideralis Programs
.   ol 
 `**~  
http://www.sideralis.net

 vero?
Scusa non so perche ma col copia ed incolla o da qualche altra parte mi si
sono persi i "++" (piupiu se non si vede) perche' qua sul PC c'e l'HO,
in ogni caso il segnale SIG32 me lo manda alla prima iterazione del ciclo .
--------------------------------
Inviato via 
http://usenet.libero.it