讀寫鎖通訊機制
讀寫鎖分為讀鎖和寫鎖,功能如下
(1)如果某執行緒申請了讀鎖,其他執行緒可以再申請讀鎖,但不能申請寫鎖。
(2)如果某執行緒申請了寫鎖,則其他執行緒不能申請讀鎖,也不能申請寫鎖。
初始化讀寫鎖
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,
const pthread_rwlockattr_t *restrict attr);
銷毀讀寫鎖
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
申請讀鎖
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);
解鎖int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
程式示例:
程式實現4個執行緒,兩個讀執行緒,兩個寫執行緒。
#include
#include
#include
#include
#include
#include
#include
static pthread_rwlock_t rwlock;
#define bufsize 1024
char gdata[bufsize];
int gtime;
void *thread_fun_read1(void*arg);
void *thread_fun_read2(void*arg);
void *thread_fun_write1(void*arg);
void *thread_fun_write2(void*arg);
int main(int argc,char* argv)
res = pthread_create(&th1,null,thread_fun_read1,null);
if(res != 0)
res = pthread_create(&th2,null,thread_fun_read2,null);
if(res != 0)
res = pthread_create(&th3,null,thread_fun_write1,null);
if(res != 0)
res = pthread_create(&th4,null,thread_fun_write2,null);
if(res != 0)
res = pthread_join(th1,&thret);
if(res != 0)
res = pthread_join(th2,&thret);
if(res != 0)
res = pthread_join(th3,&thret);
if(res != 0)
res = pthread_join(th4,&thret);
if(res != 0)
pthread_rwlock_destroy(&rwlock);
exit(0);
}void *thread_fun_read1(void*arg)
}pthread_rwlock_unlock(&rwlock);
gtime = 1;
pthread_exit(0);
}void *thread_fun_read2(void*arg)
}pthread_rwlock_unlock(&rwlock);
gtime = 1;
pthread_exit(0);
}void *thread_fun_write1(void*arg)
pthread_rwlock_unlock(&rwlock);
pthread_exit(0);
}void *thread_fun_write2(void*arg)
pthread_rwlock_unlock(&rwlock);
pthread_exit(0);
}
Linux多執行緒程式設計之讀寫鎖
讀寫鎖也是執行緒同步中的一種同步機制,簡單的來說 讀寫鎖既有讀的方面也有寫的方面,其中讀是共享鎖,而寫是獨佔鎖,而且系統中讀寫鎖的分配是寫鎖優先的。下面的用例,證明了讀鎖是共享鎖。thread fun1中加了讀鎖,但並沒有解讀鎖 thread fun2中也可以加讀鎖執行 如果thread fun2中...
Linux多執行緒程式設計 利用讀寫鎖實現讀寫互斥
一次只有乙個執行緒可以占有寫模式的讀寫鎖,但是可以有多個執行緒同時占有讀模式的讀寫鎖,正是因為這個特性,當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞。通常,當讀寫鎖處於讀模式鎖住狀態時,如果有另外執行緒試圖以寫模式加鎖,讀寫鎖通常會阻塞隨後的讀模式鎖請求,這樣可...
Linux執行緒同步 讀寫鎖
讀寫鎖和互斥量 互斥鎖 很類似,是另一種執行緒同步機制,但不屬於posix標準,可以用來同步同一程序中的各個執行緒。當然如果乙個讀寫鎖存放在多個程序共享的某個記憶體區中,那麼還可以用來進行程序間的同步.和互斥量不同的是 互斥量會把試圖進入已保護的臨界區的執行緒都阻塞 然而讀寫鎖會視當前進入臨界區的執...