Skip to content

Commit bd3cea8

Browse files
committed
fixed barbers - moved from ubuntu
1 parent b59e278 commit bd3cea8

File tree

1 file changed

+25
-32
lines changed

1 file changed

+25
-32
lines changed

barber.c

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,37 @@
33
#include <stdio.h>
44
#include <stdlib.h>
55
#include <time.h>
6-
// #include <unistd.h>
7-
// #include "queue.h"
86

97
#define QUEUE_SIZE 4
108
#define CLIENTS_AMOUNT 10
119

1210
#define MAX_RAND_INT 100
1311
#define MIN_RAND_INT 0
1412

15-
int getRandom()
16-
{
17-
return rand() % (MAX_RAND_INT - MIN_RAND_INT) + MIN_RAND_INT;
18-
}
19-
20-
// Queue* q = new Queue();
21-
2213
int queue[QUEUE_SIZE];
2314
int pointer;
15+
2416
sem_t online_clients;
2517
int online_clients_value;
2618
pthread_mutex_t queue_locker;
2719
pthread_mutex_t sem_value_locker;
2820
pthread_t clients[CLIENTS_AMOUNT];
2921
pthread_t barber;
22+
3023
int done_clients = 0;
3124

25+
int getRandom()
26+
{
27+
return rand() % (MAX_RAND_INT - MIN_RAND_INT) + MIN_RAND_INT;
28+
}
29+
3230
void* barber_worker(void* args)
3331
{
3432
printf("Barber is starting work...\n");
3533
while(1)
3634
{
37-
printf("Barber is waiting for clients...\n");
35+
printf("Barber is waiting for clients, queue size: %d...\n", pointer + 1);
36+
3837
sem_wait(&online_clients);
3938

4039
printf("Barber got new client...\n");
@@ -47,51 +46,45 @@ void* barber_worker(void* args)
4746

4847
sleep(getRandom() % 3);
4948
}
50-
51-
return NULL;
5249
}
5350

5451
void* client(void* args)
5552
{
56-
short num = (short)args;
57-
sleep(getRandom() % 3);
53+
int num = (int)args;
54+
sleep(getRandom() % 5);
5855
int online = 0;
5956

6057
printf("Client%d created\n", num);
6158

6259
pthread_mutex_lock(&sem_value_locker);
60+
printf("Client%d getting value of online clients\n", num);
61+
sem_getvalue(&online_clients, &online_clients_value);
62+
online = online_clients_value;
6363

64-
printf("Client%d getting value of online clients\n", num);
65-
66-
sem_getvalue(&online_clients, &online_clients_value);
67-
online = online_clients_value;
64+
if(online < QUEUE_SIZE) {
65+
pthread_mutex_lock(&queue_locker);
66+
printf("Client%d will be on chair now...\n", num);
67+
sem_post(&online_clients);
6868

69-
if(online < QUEUE_SIZE) {
70-
printf("Client%d will be on chair now...\n", num);
71-
sem_post(&online_clients);
72-
73-
pthread_mutex_lock(&queue_locker);
74-
queue[pointer++] = num;
75-
printf("Client%d in queue...\n", num);
76-
printf("Queue size: %d\n", pointer + 1);
77-
pthread_mutex_unlock(&queue_locker);
78-
}
69+
queue[pointer++] = num;
70+
printf("Client%d in queue...\n", num);
71+
printf("Queue size: %d\n", pointer + 1);
72+
pthread_mutex_unlock(&queue_locker);
73+
}
7974

8075
pthread_mutex_unlock(&sem_value_locker);
81-
82-
return NULL;
8376
}
8477

8578
int main() {
8679
int i;
87-
pointer = 0;
80+
pointer = -1;
8881

8982
sem_init(&online_clients, 0, 0);
9083
pthread_mutex_init(&queue_locker, NULL);
9184

9285
pthread_create(&barber, NULL, barber_worker, NULL);
9386

94-
for (i = 0; i < 10; ++i)
87+
for (i = 0; i < 20; ++i)
9588
{
9689
pthread_create(&(clients[i]), NULL, client, (void*)i);
9790
}

0 commit comments

Comments
 (0)