lab7_report.txt
Excercise 1:
1. What is the expected output of the above program?
Hello World from Thread #0, count = 0!
Hello World from Thread #0, count = 1!
Hello World from Thread #0, count = 2!
Hello World from Thread #0, count = 3!
Hello World from Thread #0, count = 4!
Hello World from Thread #1, count = 5!
Hello World from Thread #1, count = 6!
Hello World from Thread #1, count = 7!
Hello World from Thread #1, count = 8!
Hello World from Thread #1, count = 9!
Hello World from Thread #2, count = 10!
Hello World from Thread #2, count = 11!
Hello World from Thread #2, count = 12!
Hello World from Thread #2, count = 13!
Hello World from Thread #2, count = 14!
Hello World from Thread #3, count = 15!
Hello World from Thread #3, count = 16!
Hello World from Thread #3, count = 17!
Hello World from Thread #3, count = 18!
Hello World from Thread #3, count = 19!
Hello World from Thread #4, count = 20!
Hello World from Thread #4, count = 21!
Hello World from Thread #4, count = 22!
Hello World from Thread #4, count = 23!
Hello World from Thread #4, count = 24!
2. Run the code and explain the output.
Hello World from Thread #0, count = 0!
Hello World from Thread #2, count = 0!
Hello World from Thread #1, count = 0!
Hello World from Thread #3, count = 0!
Hello World from Thread #4, count = 1!
Hello World from Thread #4, count = 5!
Hello World from Thread #3, count = 5!
Hello World from Thread #1, count = 5!
Hello World from Thread #2, count = 5!
Hello World from Thread #0, count = 5!
Hello World from Thread #0, count = 10!
Hello World from Thread #2, count = 10!
Hello World from Thread #1, count = 10!
Hello World from Thread #3, count = 10!
Hello World from Thread #4, count = 10!
Hello World from Thread #2, count = 15!
Hello World from Thread #1, count = 15!
Hello World from Thread #0, count = 15!
Hello World from Thread #4, count = 15!
Hello World from Thread #3, count = 15!
Hello World from Thread #3, count = 20!
Hello World from Thread #2, count = 20!
Hello World from Thread #4, count = 20!
Hello World from Thread #0, count = 20!
Hello World from Thread #1, count = 20!
3. What caused the discrepancy between the expected and real outputs?
----------------------------------------------------------------------------------------------------------------------------
Exercise 2:
#include
#include
#include
#include
#include
#include
#define NUM_OF_THREADS 10
int count = 0;
pthread_mutex_t lock;
void* PrintMessage(void* ThreadId) {
pthread_mutex_lock(&lock);
long tid;
int i;
tid = (long)ThreadId;
for (i = 0; i < 5; i++) {
printf("Hello World from Thread #%ld, count = %d!\n", tid, count);
count++;
sleep(2);
}
pthread_mutex_unlock(&lock);
}
int main(int argc, char* argv[]) {
pthread_t threads[NUM_OF_THREADS];
int ret;
long i;
if (pthread_mutex_init(&lock, NULL) != 0) {
printf("\nMutex init has failed\n");
return 1;
}
pthread_create(&threads[0], NULL, PrintMessage, (void*)0);
pthread_create(&threads[1], NULL, PrintMessage, (void*)1);
pthread_create(&threads[2], NULL, PrintMessage, (void*)2);
pthread_create(&threads[3], NULL, PrintMessage, (void*)3);
pthread_create(&threads[4], NULL, PrintMessage, (void*)4);
pthread_join(threads[0], NULL);
pthread_join(threads[1], NULL);
pthread_join(threads[2], NULL);
pthread_join(threads[3], NULL);
pthread_join(threads[4], NULL);
pthread_mutex_destroy(&lock);
return 0;
}
----------------------------------------------------------------------------------------------------------------------------
Exercise 3:
1. Try to analyze above code without running and estimate what the expected output would be.
I am Thread 1
Hello World from Thread #1, count = 0!
I am Thread 1
Hello World from Thread #1, count = 1!
I am Thread 1
Hello World from Thread #1, count = 2!
I am Thread 1
Hello World from Thread #1, count = 3!
I am Thread 1
Hello World from Thread #1, count = 4!
I am Thread 1
Hello World from Thread #1, count = 5!
I am...