Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 140 Lecture Notes: Lock ImplementationSlide 1 Uniprocessor Locks, v1 void lock_acquire(struct lock *l) { while (1) { Disable interrupts; if (!l->locked)

Similar presentations


Presentation on theme: "CS 140 Lecture Notes: Lock ImplementationSlide 1 Uniprocessor Locks, v1 void lock_acquire(struct lock *l) { while (1) { Disable interrupts; if (!l->locked)"— Presentation transcript:

1 CS 140 Lecture Notes: Lock ImplementationSlide 1 Uniprocessor Locks, v1 void lock_acquire(struct lock *l) { while (1) { Disable interrupts; if (!l->locked) { l->locked = 1; Enable interrupts; return; } Enable interrupts; } void lock_release(struct lock *l) { Disable interrupts; l->locked = 0; Enable interrupts; } struct lock { int locked; };

2 CS 140 Lecture Notes: Lock ImplementationSlide 2 Uniprocessor Locks, v2 void lock_acquire(struct lock *l) { Disable interrupts; if (!l->locked) { l->locked = 1; } else { queue_add(&l->q, thread_current()); thread_block(); } Enable interrupts; } void lock_release(struct lock *l) { Disable interrupts; if (queue_empty(&l->q) { l->locked = 0; } else { thread_unblock(queue_remove(&l->q)); } Enable interrupts; } struct lock { int locked; struct queue q; };

3 CS 140 Lecture Notes: Lock ImplementationSlide 3 Multiprocessor Locks, v1 struct lock { int locked; }; void lock_acquire( struct lock *l) { while (aswap(&l->locked, 1)) { /* Do nothing */ } void lock_release( struct lock *l) { l->locked = 0; }

4 CS 140 Lecture Notes: Lock ImplementationSlide 4 Multiprocessor Locks, v2 struct lock { int locked; struct queue q; }; void lock_acquire( struct lock *l) { if (aswap(&l->locked, 1) { queue_add(&l->q, thread_current()); thread_block(); } void lock_release( struct lock *l) { if (queue_empty(&l->q) { l->locked = 0; } else { thread_unblock( queue_remove(&l->q)); }

5 CS 140 Lecture Notes: Lock ImplementationSlide 5 Multiprocessor Locks, v3 struct lock { int locked; struct queue q; int sync; }; void lock_acquire( struct lock *l) { while (aswap(&l->sync, 1) { /* Do nothing */ } if (!l->locked) { l->locked = 1; l->sync = 0; } else { queue_add(&l->q, thread_current()); l->sync = 0; thread_block(); } void lock_release( struct lock *l) { while (aswap(&l->sync, 1) { /* Do nothing */ } if (queue_empty(&l->q) { l->locked = 0; } else { thread_unblock( queue_remove(&l->q)); } l->sync = 0; }

6 CS 140 Lecture Notes: Lock ImplementationSlide 6 Multiprocessor Locks, v4 struct lock { int locked; struct queue q; int sync; }; void lock_acquire( struct lock *l) { Disable interrupts; while (aswap(&l->sync, 1) { /* Do nothing */ } if (!l->locked) { l->locked = 1; l->sync = 0; } else { queue_add(&l->q, thread_current()); l->sync = 0; thread_block(); } Enable interrupts; } void lock_release( struct lock *l) { Disable interrupts; while (aswap(&l->sync, 1) { /* Do nothing */ } if (queue_empty(&l->q) { l->locked = 0; } else { thread_unblock( queue_remove(&l->q)); } l->sync = 0; Enable interrupts; }

7 CS 140 Lecture Notes: Lock ImplementationSlide 7

8 CS 140 Lecture Notes: Lock ImplementationSlide 8 Multiprocessor Locks, v3 struct lock { int locked; struct queue q; }; void lock_acquire( struct lock *l) { Disable interrupts; if (aswap(&l->locked, 1) { queue_add(&l->q, thread_current()); thread_block(); } Enable interrupts; } void lock_release( struct lock *l) { Disable interrupts; if (queue_empty(&l->q) { l->locked = 0; } else { thread_unblock( queue_remove(&l->q)); } Enable interrupts; }

9 CS 140 Lecture Notes: Lock ImplementationSlide 9 Multiprocessor Locks, v4 struct lock { int locked; struct queue q; int sync; }; void lock_acquire( struct lock *l) { Disable interrupts; while (aswap(&l->sync, 1) { /* Do nothing */ } if (!l->locked) { l->locked = 1; l->sync = 0; } else { queue_add(&l->q, thread_current()); l->sync = 0; thread_block(); } Enable interrupts; } void lock_release( struct lock *l) { Disable interrupts; while (aswap(&l->sync, 1) { /* Do nothing */ } if (queue_empty(&l->q) { l->locked = 0; } else { thread_unblock( queue_remove(&l->q)); } l->sync = 0; Enable interrupts; }


Download ppt "CS 140 Lecture Notes: Lock ImplementationSlide 1 Uniprocessor Locks, v1 void lock_acquire(struct lock *l) { while (1) { Disable interrupts; if (!l->locked)"

Similar presentations


Ads by Google