当前位置: 首页 > news >正文

操作系统读写锁

读写锁

pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
功能:定义并初始化读写锁
​
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restrict attr);
功能:初始化读写锁
​
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
功能:加读锁,如果不能加则阻塞等待int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
功能:加写锁,如果不能加则阻塞等待int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
功能:解读写锁。int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
功能:尝试加读锁,如果不能加则立即返回
​
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
功能:尝试加写锁,如果不能加则立即返回
​
int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict rwlock,const struct timespec *restrict abstime);
功能:带倒计时加读锁,超时则立即返回int pthread_rwlock_timedwrlock(pthread_rwlock_t *restrict rwlock,const struct timespec *restrict abstime);
功能:带倒计时加写锁,超时则立即返回
​
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
功能:销毁读写锁使用读写锁的线程应根据后续的操作进行加锁,如果只对数据进行读取则只加读锁即可,只有对数据进行修改时才应该加写锁,与互斥锁的区别是,它能让只读的线程加上锁,使用原理与文件锁一样。线程A     线程B读锁      读锁  OK读锁      写锁  NO写锁      读锁  NO写锁      写锁  NO

练习:使用读写锁来解决同步问题。

#include <stdio.h>
#include <pthread.h>
​
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
​
int num = 0;
void* run(void* arg)
{for(int i=0; i<1000000; i++){pthread_rwlock_wrlock(&rwlock);num++;pthread_rwlock_unlock(&rwlock);}    
}
​
int main(int argc,const char* argv[])
{pthread_t tid1,tid2;pthread_create(&tid1,NULL,run,NULL);pthread_create(&tid2,NULL,run,NULL);pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_rwlock_destroy(&rwlock);printf("%d\n",num);
}


http://www.mrgr.cn/news/11547.html

相关文章:

  • 4820道西医综合真题西医真题ACCESS\EXCEL数据库
  • 计算机毕业设计选题推荐-地震数据分析与预测-Python爬虫可视化
  • springboot故障分析FailureAnalyzer
  • 深入解析Smarty SSTI 利用
  • 普通项目解决跨域问题,springSecurity解决跨域问题以及文件配置
  • 进程的创建,结束,回收基础API
  • Spring Boot : ORM 框架 JPA 与连接池 Hikari
  • 大模型学习必备指南:深入解析技术原理与应用,从入门到精通一应俱全
  • 软考攻略/超详细/系统集成项目管理工程师/基础知识分享04
  • Kafka事件(消息、数据、日志)的存储
  • 4. kafka消息监控客户端工具
  • S3协议分片上传(minio)
  • kubebuiler开发operator理论术语
  • Postman【使用总结】--SpringBoot的Controller规范【重修】
  • C#入门(16)for循环
  • 使用AWS的EC2服务如何降低成本
  • 摄像头设备问题如何检测
  • (24)(24.4) MultiWii/DJI/HDZero OSD (version 4.2 and later)(二)
  • 【软考】网络安全性威胁
  • WordPress全站从http升级至https配置