pthreads/prod_cons_unbound/{given → src}/common.h RENAMED
@@ -1,42 +1,45 @@
1
  // Copyright 2021 Jeisson Hidalgo-Cespedes <jeisson.hidalgo@ucr.ac.cr> CC-BY-4
2
 
3
  #ifndef COMMON_H
4
  #define COMMON_H
5
 
6
  #include <semaphore.h>
7
  #include <stdlib.h>
8
  #include <unistd.h>
9
 
10
  #include "queue.h"
11
 
12
  enum {
13
  ERR_NOMEM_SHARED = EXIT_FAILURE + 1,
14
  ERR_NOMEM_BUFFER,
15
  ERR_NO_ARGS,
16
  ERR_UNIT_COUNT,
17
  ERR_PRODUCER_COUNT,
18
  ERR_CONSUMER_COUNT,
19
  ERR_MIN_PROD_DELAY,
20
  ERR_MAX_PROD_DELAY,
21
  ERR_MIN_CONS_DELAY,
22
  ERR_MAX_CONS_DELAY,
23
  ERR_CREATE_THREAD,
24
  };
25
 
26
  typedef struct simulation {
27
  size_t unit_count;
28
  size_t producer_count;
29
  size_t consumer_count;
30
  useconds_t producer_min_delay;
31
  useconds_t producer_max_delay;
32
  useconds_t consumer_min_delay;
33
  useconds_t consumer_max_delay;
34
 
35
  queue_t queue;
 
36
  size_t next_unit;
 
 
37
  size_t consumed_count;
38
  } simulation_t;
39
 
40
  useconds_t random_between(useconds_t min, useconds_t max);
41
 
42
  #endif // COMMON_H
1
  // Copyright 2021 Jeisson Hidalgo-Cespedes <jeisson.hidalgo@ucr.ac.cr> CC-BY-4
2
 
3
  #ifndef COMMON_H
4
  #define COMMON_H
5
 
6
  #include <semaphore.h>
7
  #include <stdlib.h>
8
  #include <unistd.h>
9
 
10
  #include "queue.h"
11
 
12
  enum {
13
  ERR_NOMEM_SHARED = EXIT_FAILURE + 1,
14
  ERR_NOMEM_BUFFER,
15
  ERR_NO_ARGS,
16
  ERR_UNIT_COUNT,
17
  ERR_PRODUCER_COUNT,
18
  ERR_CONSUMER_COUNT,
19
  ERR_MIN_PROD_DELAY,
20
  ERR_MAX_PROD_DELAY,
21
  ERR_MIN_CONS_DELAY,
22
  ERR_MAX_CONS_DELAY,
23
  ERR_CREATE_THREAD,
24
  };
25
 
26
  typedef struct simulation {
27
  size_t unit_count;
28
  size_t producer_count;
29
  size_t consumer_count;
30
  useconds_t producer_min_delay;
31
  useconds_t producer_max_delay;
32
  useconds_t consumer_min_delay;
33
  useconds_t consumer_max_delay;
34
 
35
  queue_t queue;
36
+ pthread_mutex_t can_access_next_unit;
37
  size_t next_unit;
38
+ sem_t can_consume;
39
+ pthread_mutex_t can_access_consumed_count;
40
  size_t consumed_count;
41
  } simulation_t;
42
 
43
  useconds_t random_between(useconds_t min, useconds_t max);
44
 
45
  #endif // COMMON_H