The Gateway to Computer Science Excellence

+8 votes

**Minimum** should be **4**. **Maximum** should be **30**.

As explained, it's read, increment count and store(3 steps) during execution of :

count+=2;

3 test() calls with 5 iterations for each. For simplicity let's consider 3 processes P1, P2 and P3 will execute one test each.

P1: Test() call (first iteration): loads '0', increments it by 2, [**gets preempted before storing it back**]

P2: Allow all 5 iterations for test() to run. The count value will now be 10

P3: 4 iterations of third test() runs normally and **gets preempted**. So, now the value of count is 18.

Now, P1 is starts again from where it left off. It has count value of 2 incremented locally. It stores back 2 and **gets preempted**.

Now, P3 resumes execution of it's final iteration. It loads the value of count as 2, increments it to 4 and **gets preemted**

Now**, **P1 executes remaining 4 iterations making the value of count as 10.

Finally, P3 executes the 'store' for it's last iteration. It stores back 4 (since it has count value as 4 locally incremented)

So, **minimum** turns out to be **4**

The **maximum** will be **30** (execution happens sequentially)

+6 votes

Count += 2 treated as three instruction,

1. Read count

2. count + 2 //increment locally

3. Store // Globally

All 3 test() inside par begin par end means these function executes concurrently.

Program execution for max value.of count : run serially all Test(). Count becomes 30..

Now for minimum value :

Execute each test() for i=1 utill count +2 ..

Each test() increment count value to count +2 LOCALLY & still waiting for all test() to increment der local count by 2.

After incrementing local count let 1st test write count to 2 GLOBALLY.

Then 2nd test write count to 2 (because count +2 done locally so count value is still 2 for this test() ) . It overwrites count value by 2.

Then 3rd test() executes in same way as 2nd test() .

For n=1 all 3 test() executed and count value is 2..

Do same same for n=2,3,4,5

Final value of count is 10.

1. Read count

2. count + 2 //increment locally

3. Store // Globally

All 3 test() inside par begin par end means these function executes concurrently.

Program execution for max value.of count : run serially all Test(). Count becomes 30..

Now for minimum value :

Execute each test() for i=1 utill count +2 ..

Each test() increment count value to count +2 LOCALLY & still waiting for all test() to increment der local count by 2.

After incrementing local count let 1st test write count to 2 GLOBALLY.

Then 2nd test write count to 2 (because count +2 done locally so count value is still 2 for this test() ) . It overwrites count value by 2.

Then 3rd test() executes in same way as 2nd test() .

For n=1 all 3 test() executed and count value is 2..

Do same same for n=2,3,4,5

Final value of count is 10.

- All categories
- General Aptitude 1.9k
- Engineering Mathematics 7.5k
- Digital Logic 2.9k
- Programming and DS 4.9k
- Algorithms 4.4k
- Theory of Computation 6.2k
- Compiler Design 2.1k
- Databases 4.1k
- CO and Architecture 3.4k
- Computer Networks 4.2k
- Non GATE 1.4k
- Others 1.4k
- Admissions 595
- Exam Queries 573
- Tier 1 Placement Questions 23
- Job Queries 72
- Projects 18

50,737 questions

57,297 answers

198,265 comments

104,979 users