Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
2.0 kB
2
Indexable
Never
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>

// Global semaphore declarations
sem_t sem1, sem2, sem3, sem4, sem5;

void* printThread1(void* arg) {
    sem_wait(&sem5); // Wait for space thread to print spaces
    printf("EWU ");
    sem_post(&sem1); // Signal thread 2 to proceed
    pthread_exit(NULL);
}

void* printThread2(void* arg) {
    sem_wait(&sem1); // Wait for thread 1 to complete
    printf("is one of the ");
    sem_post(&sem2); // Signal thread 3 to proceed
    pthread_exit(NULL);
}

void* printThread3(void* arg) {
    sem_wait(&sem2); // Wait for thread 2 to complete
    printf("best universities in ");
    sem_post(&sem3); // Signal thread 4 to proceed
    pthread_exit(NULL);
}

void* printThread4(void* arg) {
    sem_wait(&sem3); // Wait for thread 3 to complete
    printf("Bangladesh\n");
    sem_post(&sem4); // Signal thread 5 to proceed
    pthread_exit(NULL);
}

void* printSpaces(void* arg) {
    sem_post(&sem5); // Signal thread 1 to print "EWU"
    sem_wait(&sem4); // Wait for thread 4 to complete
    pthread_exit(NULL);
}

int main() {
    // Initialize semaphores
    sem_init(&sem1, 0, 0);
    sem_init(&sem2, 0, 0);
    sem_init(&sem3, 0, 0);
    sem_init(&sem4, 0, 0);
    sem_init(&sem5, 0, 0);

    // Thread declarations
    pthread_t thread1, thread2, thread3, thread4, spaceThread;

    // Create threads
    pthread_create(&thread1, NULL, printThread1, NULL);
    pthread_create(&thread2, NULL, printThread2, NULL);
    pthread_create(&thread3, NULL, printThread3, NULL);
    pthread_create(&thread4, NULL, printThread4, NULL);
    pthread_create(&spaceThread, NULL, printSpaces, NULL);

    // Wait for threads to finish
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);
    pthread_join(thread3, NULL);
    pthread_join(thread4, NULL);
    pthread_join(spaceThread, NULL);

    // Destroy semaphores
    sem_destroy(&sem1);
    sem_destroy(&sem2);
    sem_destroy(&sem3);
    sem_destroy(&sem4);
    sem_destroy(&sem5);

    return 0;
}
Leave a Comment