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; 
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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?a9e342b505062622321b949ebb>