Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <pthread.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- pthread_mutex_t lock[3];
- void *client(void *arg) {
- int num = *((int *) arg) + 1;
- int carsused[3] = {0, 0, 0};
- while (!(carsused[0] == 1 && carsused[1] == 1 && carsused[2] == 1))
- {
- for (int i = 0; i < 3; i++)
- {
- if (carsused[i] == 0)
- {
- if (pthread_mutex_trylock(&lock[i]) == 0)
- {
- printf("** Buyer %d takes car %d.\n", num, i+1);
- sleep(1);
- printf("** Buyer %d returns car %d.\n", num, i+1);
- pthread_mutex_unlock(&lock[i]);
- carsused[i] = 1;
- }
- }
- }
- }
- pthread_exit(NULL);
- return 0;
- }
- int main() {
- pthread_t clients[3];
- int *clients_id = malloc(4 * sizeof(int*) );
- int i;
- for (i = 0;i<3;i++)
- {
- clients_id[i] = i;
- if (pthread_mutex_init(&lock[i], NULL) != 0)
- {
- printf("\n mutex init failed\n");
- return 1;
- }
- pthread_create(&clients[i],NULL,client, &clients_id[i]);
- }
- for (i = 0;i<3;i++)
- {
- pthread_mutex_destroy(&lock[i]);
- pthread_join(clients[i],NULL);
- }
- free(clients_id);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement