📖 Scenario: Imagine two friends sharing a notebook to write their daily expenses. Without taking turns, they might write on the same page at the same time, causing confusion and mistakes.
🎯 Goal: Build a simple example that shows how synchronization helps prevent data corruption when two processes try to update the same data.
📋 What You'll Learn
Create a shared variable called balance with an initial value of 100
Create a variable called withdraw_amount set to 30
Write a function called withdraw that subtracts withdraw_amount from balance
Add a synchronization mechanism to ensure only one withdrawal happens at a time
💡 Why This Matters
🌍 Real World
Synchronization is used in banking systems, ticket booking, and any place where multiple users access shared data.
💼 Career
Understanding synchronization is essential for software developers, system administrators, and anyone working with concurrent or parallel systems.
Progress0 / 4 steps
1
Set up the shared data
Create a variable called balance and set it to 100.
Operating Systems
Hint
Think of balance as the notebook where both friends write their expenses.
2
Add the withdrawal amount
Create a variable called withdraw_amount and set it to 30.
Operating Systems
Hint
This is the amount each friend wants to take from the shared money.
3
Write the withdrawal function
Write a function called withdraw that subtracts withdraw_amount from balance.
Operating Systems
Hint
This function simulates one friend taking money from the shared balance.
4
Add synchronization to prevent data corruption
Import threading, create a Lock called lock, and modify the withdraw function to use lock.acquire() before subtracting and lock.release() after.
Operating Systems
Hint
Using a lock is like taking turns to write in the notebook, so no one writes at the same time.
Practice
(1/5)
1. Why is synchronization important in operating systems when multiple processes access shared data?
easy
A. It speeds up the execution of all processes by running them simultaneously.
B. It allows processes to ignore each other's data changes.
C. It prevents multiple processes from changing data at the same time, avoiding corruption.
D. It deletes old data automatically to save memory.
Solution
Step 1: Understand the problem of concurrent access
When multiple processes access shared data without control, they can overwrite each other's changes, causing data corruption.
Step 2: Role of synchronization
Synchronization uses locks or similar methods to make sure only one process changes the data at a time, preventing corruption.
Final Answer:
It prevents multiple processes from changing data at the same time, avoiding corruption. -> Option C
Quick Check:
Synchronization stops simultaneous changes = B [OK]
Hint: Synchronization means one at a time access to shared data [OK]
Common Mistakes:
Thinking synchronization speeds up all processes
Believing processes can safely ignore each other's changes
Assuming synchronization deletes data automatically
2. Which of the following is the correct way to use a lock for synchronization in pseudocode?
easy
A. lock.release()
// critical section
lock.acquire()
B. lock.acquire()
// critical section
lock.release()
C. lock.wait()
// critical section
lock.notify()
D. lock.start()
// critical section
lock.stop()
Solution
Step 1: Identify correct lock usage
To protect shared data, a lock must be acquired before entering the critical section and released after finishing.
Step 2: Match with options
lock.acquire()
// critical section
lock.release() shows acquiring the lock first, then releasing it after the critical section, which is correct.
Final Answer:
lock.acquire() before and lock.release() after critical section -> Option B
Quick Check:
Acquire before, release after = A [OK]
Hint: Acquire lock before, release after critical section [OK]
Common Mistakes:
Releasing lock before acquiring it
Using wait/notify instead of acquire/release for locks
Using start/stop which are not lock methods
3. Consider this pseudocode where two threads increment a shared counter without synchronization:
A. The shared variable is not incremented correctly.
B. The lock is acquired twice, causing a deadlock.
C. The lock should be acquired after modifying the variable.
D. The lock is never released, causing other processes to wait forever.
Solution
Step 1: Identify missing lock release
The code acquires the lock but never releases it, so other processes cannot enter the critical section.
Step 2: Understand effect on synchronization
This causes a deadlock where other processes wait forever, effectively blocking progress and causing issues.
Final Answer:
The lock is never released, causing other processes to wait forever. -> Option D
Quick Check:
Missing release causes deadlock = C [OK]
Hint: Always release lock after acquiring it [OK]
Common Mistakes:
Thinking lock acquired twice causes this problem
Believing variable increment is incorrect here
Assuming lock should be acquired after modification
5. You have a shared bank account balance accessed by multiple threads. To prevent data corruption, you use synchronization. Which approach best ensures correct balance updates when multiple deposits happen simultaneously?
hard
A. Use a lock to allow only one thread to update the balance at a time.
B. Let all threads update the balance without any lock to improve speed.
C. Use multiple locks for different parts of the balance variable.
D. Update the balance only once at the end without synchronization.
Solution
Step 1: Understand the need for exclusive access
Multiple threads updating the same balance can cause lost updates if they run at the same time.
Step 2: Choose synchronization method
Using a single lock ensures only one thread updates the balance at a time, preventing corruption.
Step 3: Evaluate other options
Allowing no locks risks corruption; multiple locks on parts of balance is complex and error-prone; updating once at end misses intermediate changes.
Final Answer:
Use a lock to allow only one thread to update the balance at a time. -> Option A
Quick Check:
Single lock for exclusive update = A [OK]
Hint: One lock for shared data updates prevents corruption [OK]
Common Mistakes:
Ignoring synchronization for speed
Using multiple locks unnecessarily
Delaying updates without synchronization
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.