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
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started