Date: Mon, 27 Jun 2005 01:32:46 -0400 From: Pablo Mora <fbsd.hackers@gmail.com> To: freebsd-hackers@freebsd.org Subject: Re: problem handling POSIX thread on FreeBSD Message-ID: <a9e342b505062622321b949ebb@mail.gmail.com> In-Reply-To: <a9e342b505062622103e90d241@mail.gmail.com> References: <a9e342b5050626200472f78ea5@mail.gmail.com> <20050627041958.GB51206@dan.emsphone.com> <a9e342b505062622103e90d241@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
/* 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;=20 pthread_t hilo1, hilo2; void f1(void* ptr) { =09int i,n=3D10; =09int valor=3D0; =09char*p=3D(char*)ptr; =09 =09for(i=3D0;i<n;i++) =09{ =09=09pthread_mutex_lock(&mutex); =09=09sscanf(p,"%d",&valor); =09=09printf("\thilo1: puntero contiene %d\n", valor); =09=09valor=3Di*3; =09=09sprintf(p, "%d",valor); =09=09 =09=09pthread_mutex_unlock(&mutex2); =09} =09valor=3D(int)pthread_self(); =09printf("finaliza hilo1 con id %d\n", valor); =09pthread_exit(&valor); } void f2(void* ptr) { =09int i,n=3D10; =09int valor=3D0; =09char*p=3D(char*)ptr; =09for(i=3D0;i<n;i++) =09{ =09=09pthread_mutex_lock(&mutex2); =09=09sscanf(p,"%d",&valor); =09=09printf("hilo2: puntero contiene %d\n", valor); =09=09valor=3Di*2; =09=09 =09=09sprintf(p, "%d",valor); =09=09pthread_mutex_unlock(&mutex); =09} =09valor=3D(int)pthread_self(); =09printf("finaliza hilo2 con id %d\n", valor); =09pthread_exit(&valor); } int main() { =09pthread_attr_t atributos; =09//pthread_mutexattr_t mutexattr; - solaris =09 =09memset(buffer, '\0', sizeof(buffer)); =09/* =20 if(pthread_mutexattr_setpshared(&mutexattr,PTHREAD_PROCESS_PRIVATE)!=3D0) //solaris =09{ =09=09perror("pthread_mutexattr_setpshared"); =09=09exit(-12); =09} */ =09 =09pthread_mutex_init(&mutex, NULL); //linux =09pthread_mutex_init(&mutex2, NULL); //linux =09 =09pthread_mutex_lock(&mutex2); / =09 =09/*if(pthread_mutex_init(&mutex, &mutexattr)!=3D0) //solaris =09{ =09=09perror("pthread_mutex_init"); =09=09exit(-2); =09}*/ =09 =09if(pthread_attr_init(&atributos) < 0) =09{ =09=09perror("pthread_attr_init"); =09=09exit(-1); =09} =09=09if(pthread_attr_setscope(&atributos,PTHREAD_SCOPE_PROCESS) < 0) =09{ =09=09perror("pthread_attr_setscope"); =09=09exit(-2); =09}=09 =09if(pthread_create (&hilo1, &atributos, (void*)&f1, (void*)buffer)<0) =09{ =09=09perror("pthread_create hilo1"); =09=09exit(-2); =09} =09if(pthread_create(&hilo2, &atributos, (void*)&f2, (void*)buffer)<0) =09{ =09=09perror("pthread_create hilo2"); =09=09exit(-2); =09} =09 =09=09 =09if(pthread_join(hilo2, NULL)<0) =09{ =09=09perror("pthread_join hilo1 "); =09=09exit(-3); =09} =09puts("fin hilo 2"); =09/*if(pthread_join(hilo1, NULL)<0) =09{ =09=09perror("pthread_join hilo2 "); =09=09exit(-3); =09}*/ =09 =09 =09pthread_mutex_destroy(&mutex); =09exit(0); } output in solaris and linux: (gcc test.c -lpthread) =20 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 :-). --=20 Concepci=F3n, Chile.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?a9e342b505062622321b949ebb>