Threads
Question 1 |
Consider the following multi-threaded code segment (in a mix of C and pseudocode), invoked by two processes P1 and P2, and each of the processes spawns two threads T1 and T2:
int x=0; // global
Lock L1; // global
main() {
create a thread to execute foo(); // Thread T1
create a thread to execute foo(); // Thread T2
wait for the two threads to finish execution;
print (x); }
foo() {
int y=0;
Acquire L1;
x = x + 1;
y = y + 1;
Release L1;
print (y);}
Which of the following statement(s) is/are correct?
int x=0; // global
Lock L1; // global
main() {
create a thread to execute foo(); // Thread T1
create a thread to execute foo(); // Thread T2
wait for the two threads to finish execution;
print (x); }
foo() {
int y=0;
Acquire L1;
x = x + 1;
y = y + 1;
Release L1;
print (y);}
Which of the following statement(s) is/are correct?
At least one of P1 and P2 will print the value of x as 4. | |
Both T1 and t2, in both the processes, will print the value of y as 1. | |
Both P1 and P2 will print the value of x as2. | |
At least one of the threads will print the value of y as 2. |
Question 1 Explanation:
- True,
Execution order : P1->T1->T2; P2->T1->T2; P1-print(x),P2-print(x) | output is 4,4
- True,
y=y+1 can be treated as a critical section, and it is well synchronized by Acquire L1 and release L1.
- False, need not be true always.
- False,
Threads maintain their own copy of stack,and local variables (y) are stored on the stack.
Question 2 |
Which of the following statements about threads is/are TRUE?
Threads can only be implemented in kernel space
| |
Each thread has its own file descriptor table for open files | |
All the threads belonging to a process share a common stack
| |
Threads belonging to a process are by default not protected from each other |
Question 2 Explanation:
By default, threads within the same process share the same memory space and have access to each other's data. This lack of protection means that one thread can inadvertently overwrite or interfere with data being used by another thread within the same process.