• Solution to Critical-Section Problem
    • Mutual exclusion
    • Progress
    • Bound waiting
  • Mutex V.S. Semaphore
    • trace the code
    • mutex
      • Linux kenrel 中的 mutex lock, <include/mutex.h>
    • semaphore
      • Linux kernel 中的 semaphore, <include/semaphore.h>
    • 30秒:最大的差異在於 Mutex 只能由上鎖的 thread 解鎖,而 Semaphore 沒有這個限制,可以由原本的 thread 或是另外一個 thread 解開。另外,Mutex 只能讓一個 thread 進入 critical section,Semaphore 的話則可以設定要讓幾個 thread 進入。這讓實際上使用 Mutex 跟 Semaphore 場景有很大的差別。
    • 60秒 (cont.):舉例而言,Mutex 的兩個特性:一個是只能有持鎖人解鎖、一個是在釋放鎖之前不能退出的特性,讓 Mutex 叫常使用在 critical section 只能有一個 thread 進入,而且要避免 priority inversion 的時候;Semaphore 也能透過 binary semaphore 做到類似的事情,卻沒有辦法避免 priority inversion 出現。
    • 120秒 (cont.):而 Semaphore 更常是用在同步兩個 thread 或功能上面,因為 Semaphore 實際上使用的是 signal 的 up 與 down,讓 Semaphore 可以變成是一種 notification 的作用,例如 A thread 執行到某個地方時 B thread 才能繼續下去,就可以使用 Semaphore 來達成這樣的作用。
  • Spinlock
    • 和 mutex 不同的是會持續 spinning(blocking),而 mutex 是 non-blocking
  • Moniters
  • class problems
    • Producer and Consumer problem
    • reader and writer problem
    • Philosophers Problem
    • Sleeping Barber Problem
  • Peterson’s solution — software solution

Reference