民房做酒店出租网站app网站备案通过后怎么办

张小明 2026/1/7 16:39:39
民房做酒店出租网站app,网站备案通过后怎么办,黑马程序员培训机构,官方网站查询高考分数一、前言前面我们学习了死锁的相关知识#xff0c;今天我们来学习读写锁的相关知识。二、读写锁读写锁是 Linux 系统中一种支持并发读、独占写的同步机制#xff0c;核心设计目标是提高读多写少场景下的并发性能#xff0c;解决互斥锁#xff08;mutex#xff09;在多读场…一、前言前面我们学习了死锁的相关知识今天我们来学习读写锁的相关知识。二、读写锁读写锁是 Linux 系统中一种支持并发读、独占写的同步机制核心设计目标是提高读多写少场景下的并发性能解决互斥锁mutex在多读场景下的性能瓶颈。2.1、读写锁的核心思想读写锁遵循“读者共享写者独占”的原则将访问者分为两类角色读者Reader仅读取共享资源不修改。多个读者可以同时持有锁互不阻塞写者Writer修改共享资源。写者必须独占锁同一时间只能有一个写者且写者与读者互斥。这种设计的优势在于当共享资源以读操作为主时读写锁的并发效率远高于互斥锁互斥锁会强制所有读者串行执行。2.2、读写锁的特性1、互斥原则读者与读者不互斥允许多个读者同时加锁。读者与写者互斥读者持有锁时写者阻塞反之亦然。写者与写者互斥多个写者串行执行。2、锁的状态读写锁内部维护两个核心状态读者计数记录当前持有锁的读者数量写者标记标记是否有写者持有锁或等待锁。3、工作模式公平模式遵循 FIFO 原则等待队列中的读者和写者按顺序获取锁避免写者饥饿。非公平模式默认一般来说Linux中的pthread_rwlock更偏向于写者优先具体表现是一旦有写线程在等待新来的读线程通常会被阻塞等写线程完成后再放行读线程。2.3、读写锁场景练习1、线程A加写锁成功线程B请求读锁线程B阻塞2、线程A持有读锁线程B请求写锁线程B阻塞3、线程A拥有读锁线程B请求读锁线程B加锁4、线程A持有读锁然后线程B请求写锁然后线程C请求读锁线程B阻塞线程C阻塞 线程B加锁线程C阻塞 线程C加锁5、线程A持有写锁然后线程B请求读锁然后线程C请求写锁线程B阻塞线程C阻塞线程C加锁 线程B阻塞线程B加锁2.4、读写锁相关函数1、初始化读写锁函数原型如下int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);功能初始化一个读写锁对象分配必要的资源。参数 rwlock指向待初始化的读写锁变量attr读写锁属性NULL表示使用默认属性非公平模式返回值成功0失败非 0 错误码。注未初始化的读写锁不能直接使用初始化后的锁必须通过pthread_rwlock_destroy销毁。2、销毁读写锁函数原型如下int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);功能销毁读写锁释放其占用的资源。参数rwlock指向已初始化的读写锁。返回值成功0失败非0错误码注销毁前必须确保锁未被任何线程持有否则行为未定义。3、读者阻塞加锁函数原型如下int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);功能读者申请读锁若锁被写者持有则阻塞直到获取锁。返回值成功 0失败非 0 错误码。注多个读者可同时持有读锁与写者互斥。4、写者阻塞加锁函数原型如下int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);功能写者申请写锁若锁被读者 / 其他写者持有则阻塞直到独占锁。返回值成功 0失败非 0 错误码。注写锁为独占锁同一时间仅一个写者持有。5、读者尝试加锁非阻塞函数原型如下int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);功能读者尝试获取读锁若锁被占用写者持有 / 写者等待立即返回失败不阻塞返回值成功0失败EBUSY锁被占用EINVAL参数无效6、写者尝试加锁非阻塞函数原型如下int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);功能写者尝试获取写锁若锁被读者 / 其他写者占用立即返回失败。返回值成功0失败EBUSY锁被占用EINVAL参数无效7、 解锁统一接口函数原型如下int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);功能释放读锁或写锁无需区分读写锁内部自动识别。返回值成功 0失败EINVAL锁无效、EPERM当前线程未持有锁。注读者加锁后必须由同一线程解锁写者同理。读锁解锁时若读者计数归 0才会唤醒等待的写者写锁解锁时会唤醒所有等待的读者 / 写者按优先级。2.5、典型示例我们来完成下面一个小练习三个线程不定时写同一个全局变量五个线程不定时期读同一全局资源。首先创建一个文件pthread_rwlock.c文件输入以下代码#include stdio.h #include pthread.h #include unistd.h //不加锁 int number 10000; void *write_myfun(void *arg) { while(1) { number; printf(write: %ld %d\n,pthread_self(),number); usleep(500); } } void *read_myfun(void *arg) { while(1) { printf(read: %ld %d\n,pthread_self(),number); usleep(500); } } int main() { pthread_t p[8]; for(int i0;i3;i) { pthread_create(p[i],NULL,write_myfun,NULL); } for(int i3;i8;i) { pthread_create(p[i],NULL,read_myfun,NULL); } for(int i0;i8;i) { pthread_join(p[i],NULL); } return 0; }编译并运行结果如下截取其中的一段来看可以看到第二个的write比第一个还小说明两个写操作可能同时在执行数据可能被交叉覆盖第二个read的标识是17107远早于之前write的17109—— 说明读操作没有被写操作正确阻塞在写操作完成前就读取了旧的缓存数据或者读锁加锁时机错误。上面是不加锁的情况下面我们来加上读写锁#include stdio.h #include pthread.h #include unistd.h //加读写锁 int number 10000; pthread_rwlock_t lock; void *write_myfun(void *arg) { while(1) { pthread_rwlock_wrlock(lock); number; printf(write: %ld %d\n,pthread_self(),number); pthread_rwlock_unlock(lock); usleep(500); } } void *read_myfun(void *arg) { while(1) { pthread_rwlock_rdlock(lock); printf(read: %ld %d\n,pthread_self(),number); pthread_rwlock_unlock(lock); usleep(500); } } int main() { pthread_rwlock_init(lock,NULL); pthread_t p[8]; for(int i0;i3;i) { pthread_create(p[i],NULL,write_myfun,NULL); } for(int i3;i8;i) { pthread_create(p[i],NULL,read_myfun,NULL); } for(int i0;i8;i) { pthread_join(p[i],NULL); } pthread_rwlock_destroy(lock); return 0; }编译并运行结果如下可以看到加了读写锁的程序运行地很好没有交叉覆盖的情况。2.6、读写锁和互斥锁的区别区别如下特性读写锁rwlock互斥锁mutex访问模式读者共享、写者独占所有线程独占并发性能读多写少场景下性能高无论读写性能固定串行适用场景共享资源以读操作为主共享资源读写频率相当或写操作频繁锁状态读者计数 写者标记加锁 / 未加锁 二值状态饥饿问题非公平模式下写者可能饥饿无饥饿问题公平模式接口复杂度较高区分读写操作简单统一加解锁
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

可以自己做斗图的网站内页优化

HandheldCompanion:Windows掌机游戏体验的终极优化指南 【免费下载链接】HandheldCompanion ControllerService 项目地址: https://gitcode.com/gh_mirrors/ha/HandheldCompanion 还在为Windows掌机游戏兼容性问题而苦恼吗?HandheldCompanion这款…

张小明 2026/1/6 8:20:43 网站建设

嘉瑞建设集团有限公司网站视频网站发展好应该怎么做

2026年度辽宁省公安机关特殊职位考试录用公务员公告,2026年当年毕业的应届硕士、博士研究生报考网络安全管理职位年龄放宽到35周岁以下。有大学专科及以上文化程度即可!报名申请:12月18日至12月22日考核:专业技能水平测查、笔试、体能测评、面…

张小明 2026/1/6 8:16:40 网站建设

企业网站形象建设什么叫营销型网站

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 vue3springboot基于微信小程序的电影院售票零食商城系统设…

张小明 2026/1/6 8:14:38 网站建设

我想建个自己的网站营销型企业网站建设应遵循的原则

导语 【免费下载链接】POINTS-Reader 腾讯混元POINTS-Reader:端到端文档转换视觉语言模型,结构精简无需后处理。支持中英双语提取,OmniDocBench英文0.133、中文0.212高分。采用600M NaViT实现高吞吐量,已支持SGLang部署&#xff0…

张小明 2026/1/6 8:12:35 网站建设

水墨风格网站欣赏百度seo排名报价

Excalidraw:用“手绘白板”重塑数据库设计流程 在一次紧急的需求评审会上,产品经理刚讲完新会员系统的业务逻辑,会议室里却陷入沉默——没人能立刻理清“用户、等级、权益、订阅”之间的数据关系。这时,有人打开了 Excalidraw&am…

张小明 2026/1/6 8:10:32 网站建设

中国建设部网站首页佛山市外贸企业高端网站设计

继续移动端项目框架搭建,购买的材料预计今天可以送货,到货后搭建一个demo进行测试,之后进行电路图绘制和3d建模做盒子造型。 项目概述 MagicBox 是一个基于 Flutter 开发的跨平台移动端应用,用于管理智能设备的发现、配置和控制…

张小明 2026/1/6 8:08:29 网站建设