Mutex Concept
Concept
我們對一個 mutex 變數上 lock 或取消 lock,我們使用 mutex 的流程如下:
- Lock(上鎖):執行緒在存取共享資源前,要先呼叫 lock 來取得 mutex
- 存取資源:持有 mutex 的執行緒可以安全地讀寫共享資源
- Unlock(解鎖):使用完畢後,必須釋放 mutex,讓其他執行緒有機會使用
Remark
Blocking
如果一個 thread 求取一個已經被拿走的 mutex,他就會進入 blocking mode
What if multiple threads wants the same mutex?
在上一個持有此 mutex 的人解鎖後,所有的 thread 都會變成 runnable,然後只有優先級最高的 thread 能取到 mutex,剩下的 threads 會再次進入 blocking mode
Mutex Function
Init & Destroy
int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr)
int pthread_mutex_destroy(pthread_mutex_t *mutex)跟 thread attributes 很像,就是需要 init 也需要 destroy,如果全都用預設屬性,可以直接
pthread_mutex_t mlock = PTHREAD_MUTEX_INITIALIZER;Mutex Attribute
Lock, Unlock, and Try Lock
int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_trylock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)- 用力看 看懂了