Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

The following restrictions apply: 1) One thread will print \"hello \", one threa

ID: 3591686 • Letter: T

Question

The following restrictions apply:
1) One thread will print "hello ", one thread will print "world", and the main function will print the trailing " ",
2) Ensure thread synchronization using pthread mutex
/* Include Files */
#include <stdio.h>
/* External References */
extern void world( void );
extern void hello( void );
void main( int argc, char *argv[] ) {
world();
hello();
printf( " " );
}
/* world - print the "world" part. */
void world( void ) {
printf( "world" );
}
/* hello - print the "hello" part. */
void hello( void ) {
printf( "hello " );
}

Explanation / Answer

#include<stdio.h>

#include<string.h>

#include<pthread.h>

#include<stdlib.h>

#include<unistd.h>

pthread_t tid[2];

int counter;

pthread_mutex_t lock;

void* doSomeThing(void *arg)

{

    pthread_mutex_lock(&lock);

    unsigned long i = 0;

    counter += 1;

    printf(" Job %d started ", counter);

    for(i=0; i<(0xFFFFFFFF);i++);

    printf(" Job %d finished ", counter);

   pthread_mutex_unlock(&lock);

return NULL;

}

int main(void)

{

    int i = 0;

    int err;

if (pthread_mutex_init(&lock, NULL) != 0)

    {

        printf(" mutex init failed ");

        return 1;

    }

    while(i < 2)

    {

        err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);

        if (err != 0)

            printf(" can't create thread :[%s]", strerror(err));

        i++;

    }

pthread_join(tid[0], NULL);

    pthread_join(tid[1], NULL);

    pthread_mutex_destroy(&lock);

    return 0;

}