/* file: test.c */
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>

char buffer[512];
pthread_mutex_t mutex, mutex2; 
pthread_t hilo1, hilo2;

void f1(void* ptr)
{
        int i,n=10;
        int valor=0;
        char*p=(char*)ptr;
        
        for(i=0;i<n;i++)
        {
                pthread_mutex_lock(&mutex);
                sscanf(p,"%d",&valor);
                printf("\thilo1: puntero contiene %d\n", valor);
                valor=i*3;
                sprintf(p, "%d",valor);
                
                pthread_mutex_unlock(&mutex2);
        }
        valor=(int)pthread_self();
        printf("finaliza hilo1 con id %d\n", valor);
        pthread_exit(&valor);
}
void f2(void* ptr)
{
        int i,n=10;
        int valor=0;
        char*p=(char*)ptr;
        for(i=0;i<n;i++)
        {
                pthread_mutex_lock(&mutex2);
                sscanf(p,"%d",&valor);
                printf("hilo2: puntero contiene %d\n", valor);
                valor=i*2;
                
                sprintf(p, "%d",valor);
                pthread_mutex_unlock(&mutex);
        }
        valor=(int)pthread_self();
        printf("finaliza hilo2 con id %d\n", valor);
        pthread_exit(&valor);
}

int main()
{
        pthread_attr_t atributos;
        //pthread_mutexattr_t mutexattr; - solaris
        
        memset(buffer, '\0', sizeof(buffer));
        /*
                       
if(pthread_mutexattr_setpshared(&mutexattr,PTHREAD_PROCESS_PRIVATE)!=0)
//solaris
        {
                perror("pthread_mutexattr_setpshared");
                exit(-12);
        }
    */
        
        pthread_mutex_init(&mutex, NULL); //linux
        pthread_mutex_init(&mutex2, NULL); //linux
        
        pthread_mutex_lock(&mutex2); /
        
        /*if(pthread_mutex_init(&mutex, &mutexattr)!=0) //solaris
        {
                perror("pthread_mutex_init");
                exit(-2);
        }*/
        
        if(pthread_attr_init(&atributos) < 0)
        {
                perror("pthread_attr_init");
                exit(-1);
        }
                if(pthread_attr_setscope(&atributos,PTHREAD_SCOPE_PROCESS) < 0)
        {
                perror("pthread_attr_setscope");
                exit(-2);
        }       
        if(pthread_create (&hilo1, &atributos, (void*)&f1, (void*)buffer)<0)
        {
                perror("pthread_create hilo1");
                exit(-2);
        }
        if(pthread_create(&hilo2, &atributos, (void*)&f2, (void*)buffer)<0)
        {
                perror("pthread_create hilo2");
                exit(-2);
        }
        
                
        if(pthread_join(hilo2, NULL)<0)
        {
                perror("pthread_join hilo1 ");
                exit(-3);
        }
        puts("fin hilo 2");
        /*if(pthread_join(hilo1, NULL)<0)
        {
                perror("pthread_join hilo2 ");
                exit(-3);
        }*/
        
        
        pthread_mutex_destroy(&mutex);
        exit(0);
}

output in solaris and linux: (gcc test.c -lpthread)
  
                hilo1: puntero contiene 0
       hilo2: puntero contiene 0
               hilo1: puntero contiene 0
       hilo2: puntero contiene 3
               hilo1: puntero contiene 2
       hilo2: puntero contiene 6
               hilo1: puntero contiene 4
      hilo2: puntero contiene 9
              hilo1: puntero contiene 6
      hilo2: puntero contiene 12
              hilo1: puntero contiene 8
      hilo2: puntero contiene 15
              hilo1: puntero contiene 10
      hilo2: puntero contiene 18
              hilo1: puntero contiene 12
      hilo2: puntero contiene 21
              hilo1: puntero contiene 14
      hilo2: puntero contiene 24
              hilo1: puntero contiene 16
      finaliza hilo1 con id 1082231728
      hilo2: puntero contiene 27
      finaliza hilo2 con id 1090624432
      fin hilo 2

output on FreeBSD v4.11 STABLE (gcc test.c -pthread):

        hilo1: puntero contiene 0
        hilo1: puntero contiene 0
        hilo1: puntero contiene 3
        hilo1: puntero contiene 6
        hilo1: puntero contiene 9
        hilo1: puntero contiene 12
        hilo1: puntero contiene 15
        hilo1: puntero contiene 18
        hilo1: puntero contiene 21
        hilo1: puntero contiene 24
finaliza hilo1 con id 134534144

why ??

help me please :-).

-- 
ConcepciĆ³n, Chile.
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to