linux線程篇 (三) 線程的同步

1 互斥量

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);

 

2 讀寫鎖

//互斥量 同一時刻只有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);

 

3 條件變量

//當互斥鎖鎖住的時候,可是由於不知足執行條件,就會形成阻塞,沒法釋放,這時候就須要一種機制來釋放該鎖
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);
相關文章
相關標籤/搜索