pthreat_mutex_t mymutex; //1. 建立 初始化 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); //pthread_mutex_t *mutex 要初始化的互斥量 //const pthread_mutexattr_t *attr 互斥量的屬性,默認爲NULL //2.動態建立的互斥量要在線程結束的時候銷燬互斥量 int pthread_mutex_destroy(pthread_mutex_t *mutex); //pthread_mutex_t *mutex 要銷燬的動態建立的互斥量
//3. 加鎖 int pthread_mutex_lock(pthread_mutex_t *mutex); //若是該互斥量已經被鎖住,再次解鎖就會形成阻塞,死鎖。 int pthread_mutex_trylock(pthread_mutex_t *mutex); //即便互斥量被鎖住,再次嘗試加鎖也不會形成阻塞,而是返回錯誤碼
//4. 解鎖int pthread_mutex_unlock(pthread_mutex_t *mutex);
//互斥量 同一時刻只有1個線程能訪問互斥量鎖住的數據 //讀寫鎖有更高的並行性 pthread_rwlock_t rwlock; //讀模式加鎖 //寫模式加鎖 //不加鎖 //一次只有1個線程能夠擁有寫模式 和互斥量一致 //可是容許多線程在讀模式下加鎖
//1.初始化 int pthread_rwlock_init(pthread_rwlock_t *lock, const pthread_rwlockattr_t *attr); //2.讀鎖 int pthread_rwlock_rdlock(pthread_rwlock_t *lock); int pthread_rwlock_tryrdlock(pthread_rwlock_t *lock); //3.寫鎖 int pthread_rwlock_wrlock(pthread_rwlock_t *lock); int pthread_rwlock_trywrlock(pthread_rwlock_t *lock); //4. 解鎖 int pthread_rwlock_unlock(pthread_rwlock_t *lock);
//當互斥鎖鎖住的時候,可是由於不知足執行條件,就會形成阻塞,沒法釋放,這時候就須要一種機制來釋放該鎖 pthread_cond_t cond;
//1. 初始化 int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); //2.銷燬 int pthread_cond_destroy(pthread_cond_t *cond); //3.使用 int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); //配合互斥量 //4.喚醒 int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_signal(pthread_cond_t *cond);