Question: 3.Consider the following code segment: int pid = fork(); int c = 5; if (pid == 0) /* child process */ { fork(); c +=

3.Consider the following code segment:

int pid = fork();

int c = 5;

if (pid == 0) /* child process */

{

fork();

c += 10;

}

else

{

c += 5;

}

Answer the following questions:

a) How many different copies of the variable c are there? What are their values?

(Hint: every process has a different copy of variable c) (10 points)

b) Draw the tree structure of processes (you might want to review the examples

in chapter 3 slides). (5 points)

4. Write a C program to simulate deposit/withdraw activities on a banking account.

(Hint: you might want to review Lab 3 slides.) (25 points)

Declare the balance as a global variable and initialize it to 600.

Write two functions, one for withdraw, the other for deposit. Both withdraw

and deposit functions have one parameter, which represent the amount to

withdraw or deposit. The functions deduct the balance and add to the balance

one dollar at a time, respectively. Therefore, to withdraw 600 thousands, for

example, the withdraw function has to execute a loop with 600 thousand

iterations. The deposit function works in the same way, in the reverse

direction.

Create two Posix threads in main(), which call the withdraw and the deposit

function respectively.

Use pthread_mutex_lock() and pthread_mutex_unlock() functions to ensure

mutual exclusion between the two threads. Also make sure to use

pthread_join() to wait for the threads to terminate.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!