购物网站建设需求模板开发网站需要哪些技术

pingmian/2025/10/11 14:16:21/文章来源:
购物网站建设需求模板,开发网站需要哪些技术,全国前十名校程序开发公司,wordpress语法线程安全主要分为两个方面#xff0c;分别是资源访问互斥与线程同步#xff08;线程协同配合#xff09; 本篇博客#xff0c;我们主要来讲解资源访问互斥这一方面 目录 为什么要实现资源访问互斥#xff1f; 实现资源访问互斥#xff08;原子访问#xff09;的经典…线程安全主要分为两个方面分别是资源访问互斥与线程同步线程协同配合 本篇博客我们主要来讲解资源访问互斥这一方面 目录 为什么要实现资源访问互斥 实现资源访问互斥原子访问的经典机制——互斥锁 互斥锁相关函数 使用互斥锁实现资源访问互斥的具体实现 代码实现 结果图示 为什么要实现资源访问互斥 我们来做一个情景假设 假设现在有两个线程分别是线程A和线程B有一个全局变量名为numnum的初始值位0。 现在这两个线程都要对num这个全局变量进行1操作并且都得到了时间片大家觉得结果一定是2吗 还真不一定为什么呢我来通过几条汇编指令来给大家讲解一下 首先我们要知道 num num 1 ; 这条语句在计算机中的汇编语言是如何实现的 mov eax , num #将num的数值放入寄存器eax中add eax  , 1 #将寄存器eax中的数值1mov num , eax #再将eax中的数值赋给num 假设线程A和线程B同时获得了num的初始值也就是他们的第一条汇编指令是同时进行的不论后续两步谁快谁慢num最后的结果都是1因为他们寄存器中num的数值都是0。只有两个线程先后进行对num数值的修改才能够得到正确的结果2 为什么会出现这种情况呢就是因为他们没实现对资源的原子访问两个线程互相将对方的结果覆盖了。所以我们要采用方法杜绝这种情况实现资源访问互斥让两个线程对这些共享数据实现原子访问。也就是当自己对这些共享数据进行读写的时候其余线程不可以对这些数据进行读写操作 实现资源访问互斥原子访问的经典机制——互斥锁 实现原子访问的经典机制之一便是互斥锁机制。要理解互斥锁机制我们可以拿身边最常见的一个东西来进行举例那就是卫生间 我做一个情景假设来帮助大家理解互斥锁机制 假设现在陆续有十个人要来上厕所卫生间只有一个 第一个人到了尝试开卫生间的门其实也就是尝试获取卫生间门锁的使用权发现门没有被锁上于是获得了卫生间门锁的使用权锁上了卫生间的门并使用卫生间第二个人到了尝试开卫生间的门发现门被锁上了于是排在第一个等待卫生间开门其他的人到了尝试开卫生间的门发现门被锁上了排在第一个人后面等待卫生间开门第一个人出来了对卫生间的门进行解锁卫生间现在可供一个人使用排在队伍的第一个人获得了卫生间门锁的使用权锁上了卫生间的门并使用卫生间后面的步骤同上 卫生间就好比数据卫生间的门锁就好比互斥锁。 每个线程要想使用这些共享数据就要先尝试获取互斥锁如果发现卫生间门锁被锁上也就是该互斥锁正在被使用的话这些线程就会进入资源等待队列等待这个锁的使用权等到该互斥锁可以使用了排在最前面的线程就会得到该锁并对需要访问的共享资源进行上锁从而正确使用这些共享资源 PS: 相同共享资源的互斥锁只能有一把如果有多把互斥锁每个线程都可以拿着互斥锁对共享资源进行上锁的话互斥锁的存在就没有意义了线程间的共享资源包括全局资源全局变量就属于全局资源的一种、文件描述符、进程信息、堆区空间、信号行为、库空间等在互斥锁保护区间的代码也被称为临界区代码临界区代码越简短越好否则会影响工作效率拿到互斥锁的线程在解锁后可能会再次拿到互斥锁不是一个线程只能拿一次 如果还是不能够理解的话我们仍旧拿上面的那两个线程举例并和上面的情景进行比对 假设现在有两个线程分别是线程A和线程B要对初始值位0的全局变量num进行加一操作步骤如下 步骤卫生间情景线程情景①第一个人到了尝试获取卫生间门锁的使用权发现门没有被锁上于是获得了卫生间门锁的使用权锁上了卫生间的门并使用卫生间线程A到了尝试获取互斥锁发现锁没有被使用于是获得了该锁的使用权并对全局变量num进行上锁操作②第二个人到了尝试开卫生间的门发现门被锁上了于是排在第一个等待卫生间开门线程B到了尝试获取互斥锁但是锁只有一把于是便进入资源等待队列等待该锁的使用权③第一个人出来了对卫生间的门进行解锁卫生间门锁现在可供一个人使用线程A对全局变量num的1操作完成对该互斥锁进行解锁操作锁现在可以被一个线程使用④第二个人获得了卫生间门锁的使用权锁上了卫生间的门并使用卫生间线程B获得了该互斥锁的使用权并对全局变量num进行上锁操作⑤第二个人出来了对卫生间的门进行解锁卫生间被使用了两次 情景完成线程B对全局变量num的1操作完成对该互斥锁进行解锁操作num的结果为2情景完成 以上大致就是实现互斥锁机制的具体过程了接下来我们来了解以下相关函数 互斥锁相关函数 这里我们要用到一个结构体叫做pthread_mutex_t这是互斥锁的相关结构体 先介绍下一会会用到的几个变量 pthread_mutex_t lock ; //定义一个互斥锁的结构体const pthread_mutexattr_t attr ; //锁属性相关结构体使用默认属性就直接传NULL 函数功能返回值pthread_mutex_init(lock , attr);实现互斥锁的初始化成功完成之后会返回0其他任何返回值都表示出现了错误pthread_mutex_destroy(lock);释放锁资源所占用的内存成功返回0失败返回错误编号pthread_mutex_lock(lock);上锁成功返回0失败返回错误编号pthread_mutex_unlock(lock);解锁成功返回0失败返回错误编号 使用互斥锁实现资源访问互斥的具体实现 在了解了相关函数和实现资源互斥访问的情况下我们来写一段小代码来实现一个功能 两个线程各对全局变量num加5000次每次加1 难度⭐⭐ PS要注意的是不是每个线程一次加满5000次才让另一个线程再加5000次而是两个线程轮流加最后都能加满5000次 代码实现 //mutex_lock.c#include stdio.h #include stdlib.h #include unistd.h #include string.h #include sys/types.h #include sys/wait.h #include sys/stat.h #include signal.h #include pthread.h #include fcntl.h//将次数定义成宏 #define CONT 5000//将互斥锁与num定义成全局变量来让两个线程都可以获取该锁和num pthread_mutex_t lock; int num 0;//两个线程的工作是一样的所以这里只用定义一个工作函数 void* thread_job(void* arg) {int i 0;pthread_detach(pthread_self());//将线程设置为分离态让系统自己回收//对num进行循环1操作//注意不要把锁加在循环外面如果放在外面就代表着让一个线程一次性加满5000次后再让另一个线程加//如果把锁家在循环外面两个线程的工作效率还不如单线程工作效率高while(i CONT){pthread_mutex_lock(lock);//上锁//这就是临界区代码在上锁与解锁之间的代码就是临界区代码num; i;printf(thread No.0x%x num , num %d\n , (unsigned int)pthread_self() , num);pthread_mutex_unlock(lock);//解锁}pthread_exit(NULL); }int main() {//初始化互斥锁pthread_mutex_init(lock , NULL);pthread_t tids[2];//创造线程A和线程Bpthread_create(tids[0] , NULL , thread_job , NULL);pthread_create(tids[1] , NULL , thread_job , NULL);//让主线程循环睡眠来让线程A和线程B获取时间片//由于我们把线程设置成了分离态系统会自动回收线程不用我们操心while(1){sleep(1);}//回收锁资源pthread_mutex_destroy(lock);exit(0); } 结果图示 我们可以发现以上代码实现了该功能并完成了我们的要求没有让一个线程一次性加满五千次在加到9310的时候就发生了一次线程转换 以上就是本篇博客的全部内容了大家有什么地方没有看懂的话可以在评论区留言给我咱要力所能及的话就帮大家解答解答 今天的学习记录到此结束啦咱们下篇文章见ByeBye

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广州网站设计出名 乐云践新北京建设网官方网站

可到我的github上下载文件 需求: 刚加载时鼠标不移动,眼睛会不停地眨眼眼球会跟随鼠标移动而移动鼠标不移动时恢复眨眼效果提示: 除了眼睛是动态以外,其他静态绘制都在static()函数中利用椭圆的短轴长度先变短后恢复长度来模拟…

可以免费建设网站吗一天一元网站建设

大部分人基本上都会使用JS实现页面的滚动贴合效果&#xff0c;在学习的过程中&#xff0c;偶然发现原生CSS实现滚动贴合效果的方法&#xff1b; html 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><tit…

wordpress静态设置北京seo的排名优化

问题描述 什么是拓扑序列 若一个由图中所有点构成的序列 A 满足&#xff1a;对于图中的每条边 (x,y)&#xff0c;x 在 A 中都出现在 y 之前&#xff0c;则称 A 是该图的一个拓扑序列。图中不能有环图中至少存在一个点的入度为0 如何求拓扑序列&#xff1f; 计算出每个节点的…

做资源下载网站好吗开发手机端网站模板下载不了

HPV感染是常见的生殖道病毒感染&#xff0c;它可能导致宫颈癌等严重疾病。对于HPV感染者来说&#xff0c;转阴是预防和治疗的关键。北京劲松HPV诊疗中心主任谭巍认为除了接受正规的治疗和注意生活方式的调整外&#xff0c;饮食也是促进HPV快速转阴的重要方面。 一、苹果 苹果…

网站建设自己可以转app的网站怎么做的

看了还是懵逼&#xff01;攻击者是在哪儿截获盐值哈希密码的&#xff1f; 文章目录 盐值处理&#xff1a;深度解析与应用1. 盐值处理简介1.1 定义与概述1.2 为什么需要盐值 2. 盐值处理工作原理2.1 创建盐值2.2 应用盐值2.3 存储盐值和哈希密码 3. 盐值处理的优点与缺点3.1 优点…

网站访问量大怎么办免费的网站模板有哪些

序列生成器是一个非常经典的协程应用场景,尤其是在需要惰性生成数据或处理潜在无限的数据流时。 序列生成器概念&#xff1a;序列生成器允许程序按需生成序列中的下一个元素&#xff0c;而不是一次性计算整个序列。这种方式可以节省内存&#xff0c;并允许处理无限或未知长度的…

免费制作永久个人网站安徽网站建设合肥网站建设

文章目录 前言一、适配器模式概述1.定义与目的2.使用场景系统升级与集成接口不一致问题的解决兼容旧版本API多种数据源处理 二、适配器模式的结构1.主要组件适配器&#xff08;Adapter&#xff09;目标接口&#xff08;Target Interface&#xff09;被适配者&#xff08;Adapte…

网站推广哪个好wordpress默认用户名密码破解

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共 10 题,每题 2 分,共 30 分) 第1题 小杨父母带他到某培训机构给他报名参加 CCF 组织的 GESP 认证考试的第 1 级,那他可以选择的认证语言有几…

如何建设部网站查职称网站美观界面

代码基于yolov5 v6.0 目录&#xff1a; yolo源码注释1——文件结构yolo源码注释2——数据集配置文件yolo源码注释3——模型配置文件yolo源码注释4——yolo-py datasets # 用于存放数据集的默认文件夹yolov5 data # 模型训练的超参数配置文件以及数据集配置文件 hyps # 存放超参…

塘厦 网站建设 百度推广手机网站怎么备案

转自 https://www.csdn.net/article/2015-07-30/2825340 简介&#xff1a; Docker通过namespace将容器与主机上的网络和运行环境进行了隔离&#xff0c;默认情况下&#xff0c;在容器中运行带界面的软件在外部是看不到的。在这个分享中&#xff0c;将介绍通过共享X11套接字让外…

本人做静态网站开发网站session 验证

所谓的js页面跳转就是利用javesrcipt对打开的页面ULR进行跳转&#xff0c;如我们打开的是A页面&#xff0c;通过javsrcipt脚本就会跳转到B页面。目前很多垃圾站经常用js跳转将正常页面跳转到广告页面&#xff0c;当然也有一些网站为了追求吸引人的视觉效果&#xff0c;把一些栏…

中国施工总承包100强seo快排软件

使用 Chrome Timeline 来优化页面性能有时候&#xff0c;我们就是会不由自主地写出一些低效的代码&#xff0c;严重影响页面运行的效率。或者我们接手的项目中&#xff0c;前人写出来的代码千奇百怪&#xff0c;比如为了一个 Canvas 特效需要同时绘制 600 个三角形&#xff0c;…

重庆高端网站设计自建网站公司

在ADS中&#xff0c;信号上升时间为信号从0&#xff5e;100&#xff05;所用的时间&#xff0c;而实际上定义的上升边均为10&#xff05;&#xff5e;90&#xff05;&#xff0c;所以可以认为上升边&#xff1d;0.8*ADS设置上升时间。 一、终端开路及短路的反射信号 1.仿真条…

网站建设报价单初期整理代理游戏

目录&#xff1a; 目录 1 JSP基础知识架构 1 指令标识 1 Page命令 2 Including指令 3 taglib指令 2 脚本标识 1 JSP表达式 2 声明标识 3 代码片段 3 JSP注释 1 HTML注释 2 带有JSP表达式的注释 3 隐藏注释 4 动态注释 4 动作标识 1 包含文件标识 2 请求转发标…

wap网站制作哪家好wordpress 自动发货

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 对于谷歌和安卓来说&#xff0c;这是一个重要时刻。谷歌刚刚发布了 Gemini 1.0&#xff0c;这是其最新的LLM&#xff0c;它采用了 OpenAI 的 GPT4。 共有三种不同…

检测站营销方案石家庄新闻主持人

在实际开发中&#xff0c;我们经常会遇到下载文件的需求&#xff0c;一般情况下接口最好的处理方式为上传到文件对象存储服务器&#xff0c;然后给前端返回一个下载文件的URL&#xff0c;前端直接打开链接下载就可以了&#xff0c;但…在下载数据量大且参数复杂的情况下&#x…

服务器不是自己的做违法网站2345浏览器网页版入口

引言 PWM&#xff08;脉冲宽度调制&#xff09;是一种常见的模拟控制方式&#xff0c;通过调节脉冲宽度来控制功率输出的占空比&#xff0c;从而实现模拟信号的传输和控制。在许多领域中&#xff0c;PWM都得到了广泛的应用&#xff0c;如电机控制、LED调光、音频控制等。本文将…

宁波网站建设公司代理小程序短链接生成网址

8 / 14【育明教育】中国考研考博专业课辅导第一品牌 官方网站&#xff1a;http://www.doczj.com/doc/e25fb4dad4d8d15abe234eb2.html8《翻译硕士英语》重点考察考生的英语水平&#xff0c;内容包括&#xff1a;词汇语法、阅读理解、英语写作等&#xff0c; 总分 100 分。 二、考…

江西网站建设公司费用html网页设计工具

前言 部署在 Kubernetes 集群中的应用&#xff0c;在升级发布时可能会存在的问题&#xff1a; 1&#xff0c;由于 Kuberneter 底层 Pod 容器生命周期与网络组件生命周期是异步管理的&#xff0c;在升级时如果没有处理好应用优雅退出的问题&#xff0c;就很容易导致 http 访问请…

网站制作 万网wordpress 恢复默认

摘要&#xff1a; 特斯拉公司惨遭“毒手”是因为其Kubernetes平台没有设置密码保护。 点此查看原文&#xff1a;http://click.aliyun.com/m/43609/ 几个月前RedLock公司工作人员发现&#xff1a;数百个Kubernetes管理控制台无需密码即可访问&#xff0c;即直接公开暴露在互联网…