Skip site navigation (1)Skip section navigation (2)
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>