1、互斥鎖
為了保護共享資源,使我們執行緒可以單獨使用這個共享資源,使用之前先上鎖,那其他程序要使用的時候,就需要等待到這個執行緒用完之後,需要開鎖。
互斥鎖的使用:
幫助文件預設沒有安裝,我們需要手動安裝:sudo apt-get install manpages-posix-dev
宣告這個互斥鎖:
pthread_mutex_t m;
初始化這個互斥鎖:
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);//注意引數取位址;&m
第二個引數:是這個鎖的屬性,我們讓它是預設的屬性,這裡設定為null
返回值:成功返回0
失敗返回-1
上鎖:鎖住某個資源
int pthread_mutex_lock(pthread_mutex_t *mutex); 這個函式是阻塞型,引數傳遞的是這個鎖的指標。
int pthread_mutex_trylock(pthread_mutex_t *mutex); 這個是非阻塞型的,引數傳遞的是這個鎖的指標。
返回值:成功返回0
失敗返回-1
解鎖:int pthread_mutex_unlock(pthread_mutex_t *mutex); 這個是解鎖的函式,引數傳遞的是這個鎖的指標。
返回值:成功返回0
失敗返回-1
銷毀這個互斥鎖:
int pthread_mutex_destroy(pthread_mutex_t *mutex);
第乙個引數:傳遞的是這個鎖的指標。
返回值:成功返回0
失敗返回-1
互斥鎖:現象:列印aaaaaaabbbbb//**中的兩種方式都可以;
#include
#include
#include
pthread_mutex_t m;
void *func(void *arg)
pthread_mutex_unlock(&m);
pthread_exit(null);
}int main()
// pthread_mutex_lock(&m);
pthread_create(&tid1,null,func,"aaaaaaaaaaaaaaaa");
pthread_join(tid1,null);
// pthread_mutex_unlock(&m);
pthread_create(&tid2,null,func,"bbbbbbbbbbbbbbb");
pthread_join(tid2,null);
printf("\n");
pthread_mutex_destroy(&m);
return 0;
}2、讀寫鎖
為了保護共享資源的訪問,但是這裡區分了讀的訪問和寫的訪問。
先宣告:pthread_rwlock_t rwlock;
初始化:int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
第二個引數:是這個鎖的屬性,我們讓它是預設的屬性,這裡設定為null
返回值:成功返回0
失敗返回-1
上鎖:int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); 上的是讀鎖
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock); 上的是讀鎖,非阻塞型的
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock); 上的是寫鎖,非阻塞型的
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); 上的是寫鎖,阻塞型的,如果上了這個寫鎖,它的作用和互斥鎖是一樣。
解鎖:pthread_rwlock_unlock
銷毀: int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
第乙個引數:傳遞的是這個鎖的指標
返回值:成功返回0
失敗返回-1
讀寫鎖:當為讀鎖的時候都可以訪問,所以隨機列印abcabcabc,當為寫鎖的時候是互斥的,所以可以列印aaaaabbbbbbcccccccc
#include
#include
#include
pthread_rwlock_t rwlock;
void *func(void *arg)
pthread_rwlock_unlock(&rwlock);
pthread_exit(null);
}int main()
// pthread_mutex_lock(&m);
pthread_create(&tid1,null,func,"aaaaaaaaaaaaaaaa");
// pthread_mutex_unlock(&m);
pthread_create(&tid2,null,func,"bbbbbbbbbbbbbbb");
pthread_create(&tid3,null,func,"ccccccccccccccc");
pthread_join(tid2,null);
pthread_join(tid1,null);
pthread_join(tid3,null);
printf("\n");
pthread_rwlock_destroy(&rwlock);
return 0;
}
執行緒間互斥鎖
一 兩種使用方式 1.靜態方式 pthread mutex t mtx pthread mutex initializer 2.動態方式 include int pthread mutex init pthread mutex t mutex,const pthread mutexattr t at...
執行緒狀態 互斥鎖 通訊
標籤 空格分隔 多執行緒 void touchesbegan nsset touches withevent uievent event void run 注意點互斥鎖和自旋鎖不同點 盡量避免多執行緒搶奪同一塊資源,盡量將加鎖 資源搶奪的業務邏輯交給伺服器端處理,減小移動客戶端的壓力 void pe...
05執行緒通訊 互斥鎖
1.建立乙個互斥鎖 int pthread mutex init ptread mutex t mutex,const pthread mutexattr t attr 成功返回0 失敗eof 2.申請乙個互斥鎖 int pthread mutex lock ptread mutex t mutex...