Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <pthread.h>
- #define NUM_DRIVERS 3
- #define NUM_MUTEXES 3
- pthread_mutex_t mutex[NUM_MUTEXES];
- void *driving(void * buyer){
- int num_cars ;
- int buyer_num = *(int*)buyer;
- while(1) {
- for (num_cars = 0; num_cars < NUM_MUTEXES; num_cars ++)
- {
- if(pthread_mutex_trylock(&mutex[num_cars]))
- {
- printf("Buyer %d takes car %d.\n",buyer_num + 1, num_cars + 1);
- sleep(0.5);
- printf("Buyer %d returns car %d.\n",buyer_num + 1, num_cars + 1);
- pthread_mutex_unlock(&mutex[num_cars]);
- }
- }
- }
- return NULL;
- }
- int main () {
- pthread_t driver[NUM_DRIVERS];
- int rc;
- int num_drivers, num_threads;
- for(num_threads = 0 ; num_threads < NUM_MUTEXES ; num_threads++)
- {
- if(pthread_mutex_init (&mutex[num_threads], NULL))
- {
- printf("ERROR initing mutex");
- return 0;
- }
- }
- for(num_drivers = 0 ; num_drivers < NUM_DRIVERS; num_drivers++)
- {
- rc = pthread_create(&driver[num_drivers], NULL, driving, &num_drivers);
- if(rc)
- {
- printf("ERROR creating thread\n");
- return 0;
- }
- }
- for (num_drivers = 0 ; num_drivers < NUM_DRIVERS; num_drivers++)
- {
- if(pthread_join(driver[num_drivers], NULL))
- {
- printf("ERROR joining threads");
- return 0;
- }
- }
- for(num_threads = 0 ; num_threads < NUM_MUTEXES ; num_threads++)
- {
- if(pthread_mutex_destroy (&mutex[num_threads]))
- {
- printf("ERROR destroying mutex");
- return 0;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement