线程同步-读写锁(rwlock)
读写锁
读写锁是互斥量的细化:显然,只有对全局资然进行写入操作时,才需要同步;在对全局资然进行读取操作时,是不需要锁的。
相关函数
pthread_rwlock_t //读写锁类型 pthread_rwlock_init //初始化 pthread_rwlock_destroy //销毁锁 pthread_rwlock_rdlock //获取读锁 pthread_rwlock_wrlock //获取写锁 pthread_rwlock_tryrdlock pthread_rwlock_trywrlock pthread_rwlock_unlock //释放读写锁
示例
#include <stdio.h> #include <unistd.h> #include <pthread.h> pthread_rwlock_t rwlock; int counter = 0; void *fun_r(void *argv) { while (1) { //既然是读操作,当然可以完全不用锁 pthread_rwlock_rdlock(&rwlock); printf("thread %x read,counter=%d\n", pthread_self(), counter); pthread_rwlock_unlock(&rwlock); sleep(1); } } void *fun_w(void *argv) { while (1) { //写操作,写操作使用写锁 pthread_rwlock_wrlock(&rwlock); counter++; printf("thread %x write,counter=%d\n", pthread_self(), counter); pthread_rwlock_unlock(&rwlock); sleep(1); } } int main(void) { pthread_rwlock_init(&rwlock, NULL); pthread_t tid[5]; int i; //开启2个线程读 for (i = 0; i < 2; i++) { pthread_create(&tid[i], NULL, fun_r, NULL); } //开启3个线程写 for (i = 2; i < 5; i++) { pthread_create(&tid[i], NULL, fun_w, NULL); } for (i = 0; i < 5; i++) { pthread_join(tid[i], NULL); } pthread_rwlock_destroy(&rwlock); return 0; }
版权声明:本文为博主原创文章,转载,请注明出处。
时间: 2024-12-22 06:00:29