Download presentation
Presentation is loading. Please wait.
Published byVictoria Wilkinson Modified over 6 years ago
1
Andy Wang Operating Systems COP 4610 / CGS 5765
Synchronization Andy Wang Operating Systems COP 4610 / CGS 5765
2
Motivating Example: Too Much Milk
Two robots are programmed to maintain the milk inventory at a store… They are not aware of each other’s presence… Robot: Dumber Robot: Dumb
3
Motivating Example: Too Much Milk
Dumb 10:00 Look into fridge: Out of milk Dumber
4
Motivating Example: Too Much Milk
Dumb 10:00 Look into fridge: Out of milk 10:05 Head for the warehouse Dumber
5
Motivating Example: Too Much Milk
Dumb 10:05 Head for the warehouse Dumber 10:10 Look into fridge: Out of milk
6
Motivating Example: Too Much Milk
Dumb Dumber 10:10 Look into fridge: Out of milk 10:15 Head for the warehouse
7
Motivating Example: Too Much Milk
Dumb 10:20 Arrive with milk Dumber 10:15 Head for the warehouse
8
Motivating Example: Too Much Milk
Dumb 10:20 Arrive with milk Dumber 10:15 Head for the warehouse
9
Motivating Example: Too Much Milk
Dumb 10:20 Arrive with milk 10:25 Go party Dumber
10
Motivating Example: Too Much Milk
Dumb 10:20 Arrive with milk 10:25 Go party Dumber 10:30 Arrive with milk: “Uh oh…”
11
Definitions Synchronization: uses atomic operations to ensure cooperation among threads Mutual exclusion: ensures one thread can do something without the interference of other threads Critical section: a piece of code that only one thread can execute at a time
12
More on Critical Section
A lock prevents a thread from doing something A thread should lock before entering a critical section A thread should unlock when leaving the critical section A thread should wait if the critical section is locked Synchronization often involves waiting
13
Too Much Milk: Solution 1
Two properties: Only one robot will go get milk Someone should go get the milk if needed Basic idea of solution 1 Leave a note (kind of like a lock) Remove the note (kind of like a unlock) Don’t go get milk if the note is around (wait)
14
Too Much Milk: Solution 1
if (no milk) { if (no note) { // leave a note; // go get milk; // remove the note; }
15
Too Much Milk: Solution 1
Dumb 10:00 if (no milk) { Dumber
16
Too Much Milk: Solution 1
Dumb 10:00 if (no milk) { Dumber 10:01 if (no milk) {
17
Too Much Milk: Solution 1
Dumb 10:00 if (no milk) { Dumber 10:01 if (no milk) { 10:02 if (no note) {
18
Too Much Milk: Solution 1
Dumb 10:00 if (no milk) { 10:03 if (no note) { Dumber 10:01 if (no milk) { 10:02 if (no note) {
19
Too Much Milk: Solution 1
Dumb 10:00 if (no milk) { 10:03 if (no note) { 10: // leave a note Dumber 10:01 if (no milk) { 10:02 if (no note) {
20
Too Much Milk: Solution 1
Dumb 10:03 if (no note) { 10: // leave a note Dumber 10:01 if (no milk) { 10:02 if (no note) { 10: // leave a note
21
Too Much Milk: Solution 1
Dumb 10:03 if (no note) { 10: // leave a note 10: // go get milk Dumber 10:02 if (no note) { 10: // leave a note
22
Too Much Milk: Solution 1
Dumb 10:03 if (no note) { 10: // leave a note 10: // go get milk Dumber 10: // leave a note 10: // go get milk
23
Too Much Milk: Solution 2
Okay…solution 1 does not work The notes are posted too late… What if both robots begin by leaving their own notes?
24
Too Much Milk: Solution 2
// leave a note; if (no note from the other) { if (no milk) { // go get milk; } // remove the note;
25
Too Much Milk: Solution 2
Dumb 10:00 // leave a note Dumber
26
Too Much Milk: Solution 2
Dumb 10:00 // leave a note Dumber 10:01 // leave a note
27
Too Much Milk: Solution 2
Dumb 10:00 // leave a note 10:02 if (no note from Dumber) {…} Dumber 10:01 // leave a note
28
Too Much Milk: Solution 2
Dumb 10:00 // leave a note 10:02 if (no note from Dumber) {…} Dumber 10:01 // leave a note 10:03 if (no note from Dumb) {…}
29
Too Much Milk: Solution 2
Dumb 10:00 // leave a note 10:02 if (no note from Dumber) {…} 10:04 // remove the note Dumber 10:01 // leave a note 10:03 if (no note from Dumb) {…}
30
Too Much Milk: Solution 2
Dumb 10:00 // leave a note 10:02 if (no note from Dumber) {…} 10:04 // remove the note Dumber 10:01 // leave a note 10:03 if (no note from Dumb) {…}
31
Too Much Milk: Solution 2
Dumb 10:02 if (no note from Dumber) {…} 10:04 // remove the note Dumber 10:01 // leave a note 10:03 if (no note from Dumb) {…} 10:05 // remove the note
32
Too Much Milk: Solution 2
Dumb 10:02 if (no note from Dumber) {…} 10:04 // remove the note Dumber 10:01 // leave a note 10:03 if (no note from Dumb) {…} 10:05 // remove the note
33
Too Much Milk: Solution 3
Dumb // leave Dumb’s note while (Dumber’s note) { }; if (no milk) { // go get milk } // remove Dumb’s note Dumber // leave Dumber’s note if (no Dumb’s note) { if (no milk) { // go get milk } // remove Dumber’s note
34
Too Much Milk Solution 3 How do we verify the correctness of a solution? Test arbitrary interleaving of locking and checking locks In this case, leaving notes and checking notes
35
Dumber Challenges Dumb: Case 1
// leave Dumb’s note while (Dumber’s note) { }; if (no milk) { // go get milk } // remove Dumb’s note Dumber // leave Dumber’s note if (no Dumb’s note) { } // remove Dumber’s note Time
36
Dumber Challenges Dumb: Case 2
// leave Dumb’s note while (Dumber’s note) { }; if (no milk) { // go get milk } // remove Dumb’s note Dumber // leave Dumber’s note if (no Dumb’s note) { } // remove Dumber’s note Time
37
Dumber Challenges Dumb: Case 3
// leave Dumb’s note while (Dumber’s note) { }; if (no milk) { // go get milk } // remove Dumb’s note Dumber // leave Dumber’s note if (no Dumb’s note) { } // remove Dumber’s note Time
38
Dumb Challenges Dumber: Case 1
// leave Dumb’s note while (Dumber’s note) { }; if (no milk) { } // remove Dumb’s note Dumber // leave Dumber’s note if (no Dumb’s note) { if (no milk) { // go get milk } // remove Dumber’s note Time
39
Dumb Challenges Dumber: Case 2
// leave Dumb’s note while (Dumber’s note) { }; if (no milk) { // go get milk } // remove Dumb’s note Dumber // leave Dumber’s note if (no Dumb’s note) { } // remove Dumber’s note Time
40
Dumb Challenges Dumber: Case 3
// leave Dumb’s note while (Dumber’s note) { }; if (no milk) { // go get milk } // remove Dumb’s note Dumber // leave Dumber’s note if (no Dumb’s note) { } // remove Dumber’s note Time
41
Lessons Learned Although it works, Solution 3 is ugly
Difficult to verify correctness Two threads have different code Difficult to generalize to N threads While Dumb is waiting, it consumes CPU time (busy waiting) More elegant with higher-level primitives lockacquire(); if (no milk) { // go get milk } lockrelease();
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.