Buenas no puedo hacer que pase a mi segundo hilo
codigo:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <pthread.h>
#include <windows.h>
pthread_mutex_t candado1=PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t candado2=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condv1=PTHREAD_COND_INITIALIZER;
pthread_cond_t condv2=PTHREAD_COND_INITIALIZER;
int ElementoA=0, Creacion_de_elementos_de_A=0;
int ElementoB=0, Creacion_de_elementos_de_B=0;
void * Hilo1(void *arg)
{
while(1)
{
if(0<=ElementoA){
Creacion_de_elementos_de_A=ElementoA++;
printf("Hilo1: Elemento A creado\n",ElementoA);
Sleep(1000);
}
if(3 == ElementoA){
printf("Hilo1:Se lleno la pila\n",ElementoA);
Sleep(1000);
printf("Hilo1:Se va a vaciar la pila\n",ElementoA);
Sleep(1000);
break;
}
}
pthread_exit(NULL);
return 0;
}
void * Hilo2(void *arg)
{
while(1)
{
pthread_mutex_lock(&candado1);
pthread_cond_wait(&condv1,&candado1);
pthread_mutex_unlock(&candado2);
if(0>=ElementoB){
Creacion_de_elementos_de_B=ElementoB++;
printf("Hilo2: Elemento B creado\n",ElementoB);
}
if(3== ElementoB ){
printf("Hilo2: Se lleno la pila\n",ElementoB);
Sleep(1000);
printf("Hilo2:Se va a vaciar la pila\n",ElementoB);
}
pthread_mutex_lock(&candado1);
pthread_cond_signal(&condv2);
pthread_mutex_unlock(&candado2);
}
pthread_exit(NULL);
return 0;
}
int main(void)
{
pthread_t IdHilo1, IdHilo2;
printf("Inicia produccion()\n");
srand(time(NULL));
pthread_mutex_init(&candado1,NULL);
pthread_mutex_init(&candado2,NULL);
pthread_create(&IdHilo1,NULL,Hilo1,NULL);
pthread_create(&IdHilo2,NULL,Hilo2,NULL);
pthread_join(IdHilo1,NULL);
pthread_join(IdHilo2,NULL);
pthread_mutex_init(&candado1,NULL);
pthread_mutex_init(&candado2,NULL);
return 0;
}
codigo:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <pthread.h>
#include <windows.h>
pthread_mutex_t candado1=PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t candado2=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condv1=PTHREAD_COND_INITIALIZER;
pthread_cond_t condv2=PTHREAD_COND_INITIALIZER;
int ElementoA=0, Creacion_de_elementos_de_A=0;
int ElementoB=0, Creacion_de_elementos_de_B=0;
void * Hilo1(void *arg)
{
while(1)
{
if(0<=ElementoA){
Creacion_de_elementos_de_A=ElementoA++;
printf("Hilo1: Elemento A creado\n",ElementoA);
Sleep(1000);
}
if(3 == ElementoA){
printf("Hilo1:Se lleno la pila\n",ElementoA);
Sleep(1000);
printf("Hilo1:Se va a vaciar la pila\n",ElementoA);
Sleep(1000);
break;
}
}
pthread_exit(NULL);
return 0;
}
void * Hilo2(void *arg)
{
while(1)
{
pthread_mutex_lock(&candado1);
pthread_cond_wait(&condv1,&candado1);
pthread_mutex_unlock(&candado2);
if(0>=ElementoB){
Creacion_de_elementos_de_B=ElementoB++;
printf("Hilo2: Elemento B creado\n",ElementoB);
}
if(3== ElementoB ){
printf("Hilo2: Se lleno la pila\n",ElementoB);
Sleep(1000);
printf("Hilo2:Se va a vaciar la pila\n",ElementoB);
}
pthread_mutex_lock(&candado1);
pthread_cond_signal(&condv2);
pthread_mutex_unlock(&candado2);
}
pthread_exit(NULL);
return 0;
}
int main(void)
{
pthread_t IdHilo1, IdHilo2;
printf("Inicia produccion()\n");
srand(time(NULL));
pthread_mutex_init(&candado1,NULL);
pthread_mutex_init(&candado2,NULL);
pthread_create(&IdHilo1,NULL,Hilo1,NULL);
pthread_create(&IdHilo2,NULL,Hilo2,NULL);
pthread_join(IdHilo1,NULL);
pthread_join(IdHilo2,NULL);
pthread_mutex_init(&candado1,NULL);
pthread_mutex_init(&candado2,NULL);
return 0;
}