Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lotux5 en 26 Octubre 2013, 21:14 pm



Título: Ayuda con ejercicio de Hebras/Hilos y semaforos
Publicado por: Lotux5 en 26 Octubre 2013, 21:14 pm
EEl programa compila, pero no funcion por lo que no se cual puede ser el error.
Código
  1. #include <iostream>
  2. #include <pthread.h>
  3. #include <semaphore.h>
  4. using namespace std;
  5.  
  6. const int num_items = 75 ;
  7. const int tam_vec = 15 ;
  8. int vector[tam_vec] ;
  9. int primera_libre = 0 ;
  10. int primera_ocupada = 0 ;
  11. sem_t puede_leer, puede_escribir ;
  12.  
  13.  
  14.  
  15. int producir_dato(){
  16.  
  17. int contador = 1 ;
  18. return contador++ ;
  19. }
  20.  
  21. void consumir_dato( int dato ){
  22.  
  23. cout << "dato recibido: " << dato << endl ;
  24. }
  25.  
  26.  
  27.  
  28. void * productor( void * ){
  29.  
  30. for( unsigned i = 0 ; i < num_items ; i++ ){
  31. if (primera_libre == tam_vec)
  32. primera_libre = 0;
  33. int dato = producir_dato() ;
  34. sem_wait (&puede_escribir);
  35. vector[primera_libre] = dato ;
  36. primera_libre++;
  37. sem_post(&puede_leer);
  38. }
  39. }
  40.  
  41. void * consumidor( void * ){
  42.  
  43. for( unsigned i = 0 ; i < num_items ; i++ ){
  44. int dato ;
  45. if (primera_ocupada == tam_vec)
  46. primera_ocupada = 0;
  47. sem_wait (&puede_leer);
  48. dato = vector[primera_ocupada] ;
  49. primera_ocupada++ ;
  50. sem_signal(&puede_escribir);
  51. consumir_dato( dato ) ;
  52. }
  53. }
  54.  
  55. int main(){
  56. pthread_t consumidora, productora;
  57. sem_init( &puede_leer, 0, 1);
  58. sem_init( &puede_escribir, 0 , 0);
  59.  
  60. pthread_create(&productora, NULL, productor, NULL);
  61. pthread_create(&consumidora, NULL, consumidor, NULL);
  62.  
  63. pthread_join( productora, NULL ) ;
  64.   pthread_join( consumidora, NULL ) ;
  65.  
  66. sem_destroy( &puede_escribir );
  67. sem_destroy( &puede_leer );
  68. }