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

网站网站开发网上支付网页设计与制作项目

网站网站开发网上支付,网页设计与制作项目,做响应式网站兼容哪几个尺寸,中卫网站设计公司有哪些目录 一、锁的概念 一些需要了解的概念 什么是锁#xff1f;为什么需要锁#xff1f;什么时候使用锁#xff1f;怎么定义锁#xff1f; 二、锁的接口 1.初始化锁 2.加锁 3.申请锁 4.解锁 5.销毁锁 三、实践#xff08;写代码#xff09;#xff1a;黄牛抢票 M…目录 一、锁的概念 一些需要了解的概念 什么是锁为什么需要锁什么时候使用锁怎么定义锁 二、锁的接口 1.初始化锁 2.加锁 3.申请锁 4.解锁 5.销毁锁 三、实践写代码黄牛抢票 Makefile test.cc 结果 一、锁的概念 一些需要了解的概念 临界资源任一时刻只允许一个线程访问的共享资源临界区访问临界资源的代码原子性不会被任何调度机制打断的操作该操作只有两态要么完成要么未完成互斥任何时刻互斥可以保证有且只有一个执行流进入临界区访问临界资源通常对临界资源起保护作用而锁就是实现互斥的。同步同步是一种机制用于协调不同进程、线程或设备之间的操作确保它们按照预期的顺序和方式进行。同步的目的是保持数据的一致性和系统的稳定性。 什么是锁为什么需要锁什么时候使用锁怎么定义锁 什么是锁 锁是一种同步机制用于控制多个线程对共享资源的访问。通过锁可以确保一次只有一个线程能够访问特定的代码段或数据从而防止数据竞争和不一致。锁的主要目的是确保数据的一致性和线程安全性。 为什么需要锁 需要锁的主要原因在于确保多线程或多用户环境中共享资源访问的原子性和数据一致性。在多线程应用中若多个线程同时访问并修改同一资源可能导致数据冲突、不一致甚至损坏。 故事说明把线程比作一个学生小明锁是自习室的门口上的锁头当小明要进自习室时他就从墙上拿钥匙钥匙只有一把解锁进入教室而此时的自习室就是临界区小明在自习室的书本本子笔就是临界资源当小明突然要上厕所离开自习室时因为自习室里有小明的书本呀笔呀等等东西所以小明离开时就把门锁上了。小明自习了一天了到晚上了吃饭了小明不想自习了小明带上他的东西离开然后 把门锁上把钥匙挂回墙上此时其他同学就可以使用自习室了。在这例子中锁的作用就是只允许有钥匙的学生进入自习室不允许其他没有钥匙的同学进入其他线程换言之锁的作用就是实现在一个临界区中的任一时刻只允许一个线程进入访问。在这个故事中如果自习室门上没有锁当小明要上厕所时别的同学可以可以进入自习室破坏拿走小明的东西呢答案是有可能的所以为了保证自习室里的小明的资源的安全所以需要锁把门上锁。 什么时候使用锁 使用锁主要在多线程或多用户环境中当多个线程或用户需要并发访问和修改共享资源时。锁能确保同一时间只有一个线程或用户访问资源避免数据冲突和不一致。在需要保证数据完整性、原子性和安全性的场景下应使用锁来同步和控制对共享资源的访问。 在Linux中锁长什么样呢我们怎么定义锁呢 pthread_mutex_t是一个用于线程同步的互斥锁类型。例如pthread_mutex_t mutex定义互斥锁变量mutexmutex就是一个锁锁变量。 二、锁的接口 1.初始化锁 功能用于初始化锁变量 原型 #include pthread.h 锁为局部变量时使用如下函数初始化 int pthread_mutex_init(pthread_mutex_t *restrict mutex,               const pthread_mutexattr_t *restrict attr); 锁为全局变量时使用如下方法初始化 pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER;   参数 pthread_mutex_t *restrict mutex指向要初始化的互斥锁变量的指针。这个指针指向的互斥锁变量在调用 pthread_mutex_init 之前应该是未初始化的。 const pthread_mutexattr_t *restrict attr指向互斥锁属性的指针。这个参数是可选的通常可以传递 NULL nullptr来使用默认的互斥锁属性。如果你需要设置特定的属性例如互斥锁的类型你需要先使用 pthread_mutexattr_init 初始化一个 pthread_mutexattr_t 变量然后设置所需的属性最后将其传递给 pthread_mutex_init。 返回值成功返回0失败返回错误码 使用例子 #include iosteam #include pthread.h using namespace std;//全局锁初始化方式 pthread_mutex_t global_mutex PTHREAD_MUTEX_INITIALIZER;//定义并初始化锁int main() {//局部初始化方式pthread_mutex_t local_mutex;//定义锁pthread_mutex_init(local_mutex nullptr);//初始化锁//加锁//...//解锁//销毁锁return 0; }   2.加锁 功能获取锁定互斥锁如果锁当前未被其他线程占用即锁是“空闲”的那么调用此函数的线程将成功获取锁并可以继续执行其临界区代码。如果锁已被其他线程占用则调用线程将被阻塞直到锁被释放即被当前持有锁的线程调用 pthread_mutex_unlock 原型 #include pthread.h int pthread_mutex_lock(pthread_mutex_t *mutex); 参数 pthread_mutex_t *mutex是一个指向互斥锁变量的指针。 返回值 pthread_mutex_lock 函数的返回值用于指示加锁操作是否成功。 如果成功获取锁函数返回 0。如果在尝试获取锁时发生错误例如由于无效的互斥锁指针或系统资源不足函数将返回一个错误码非零值。具体的错误码可以根据不同的系统和库实现而有所不同但通常会遵循 POSIX 线程标准中定义的错误码。 注意事项 使用 pthread_mutex_lock 时必须确保在不再需要锁时调用 pthread_mutex_unlock 来释放锁以避免死锁。如果在调用 pthread_mutex_lock 后线程被中断或取消锁可能仍然处于锁定状态需要特别小心处理。如果互斥锁的类型是递归锁recursive mutex则同一个线程可以多次获取同一个锁但每次获取锁后都必须对应地释放锁。 3.申请锁 功能尝试获取一个互斥锁mutex而不会阻塞调用线程。如果互斥锁已经被其他线程持有则 pthread_mutex_trylock 不会使调用线程进入睡眠状态等待锁释放而是立即返回表示失败的错误码。 原型 #include pthread.h int pthread_mutex_trylock(pthread_mutex_t *mutex); 参数 pthread_mutex_t *mutex是一个指向互斥锁变量的指针。 返回值 如果成功获取锁函数返回 0。如果锁已被其他线程占用或者发生其他错误如传递了无效的互斥锁指针函数将返回一个错误码。常见的错误码包括 EBUSY表示锁当前被其他线程占用和 EINVAL表示传递给函数的互斥锁是无效的。 4.解锁 功能用于释放互斥锁mutex在多线程编程中用于确保线程同步的正确性。当一个线程完成对共享资源的访问后它应该调用 pthread_mutex_unlock 来释放锁以便其他线程能够获取该锁并访问相同的资源。 原型 #include pthread.h int pthread_mutex_unlock(pthread_mutex_t *mutex); 参数 pthread_mutex_t *mutex是一个指向互斥锁变量的指针。 返回值 如果成功释放锁函数返回 0。如果在尝试解锁时发生错误例如传递给函数的互斥锁是无效的或者当前线程没有持有该锁函数将返回一个错误码。常见的错误码包括 EINVAL表示传递给函数的互斥锁是无效的和 EPERM表示当前线程没有持有该锁。 5.销毁锁 功能用于销毁释放互斥锁mutex的函数。在多线程编程中当不再需要某个互斥锁时应该调用 pthread_mutex_destroy 来销毁它以释放相关资源。 原型 #include pthread.h int pthread_mutex_destroy(pthread_mutex_t *mutex); 参数 pthread_mutex_t *mutex是一个指向互斥锁变量的指针。 返回值 如果成功销毁锁函数返回 0。如果在尝试销毁锁时发生错误例如传递给函数的互斥锁是无效的或者锁仍被持有函数将返回一个错误码。常见的错误码包括 EBUSY表示锁当前被其他线程占用和 EINVAL表示传递给函数的互斥锁是无效的。 三、实践写代码黄牛抢票 说明用多线程模拟黄牛常数模拟票 Makefile test:test.ccg -o $ $^ -stdc11 -lpthread PHONY:clean clean:rm -f test;test.cc #include iostream #include string #include unistd.h #include pthread.h #include vector using namespace std; int ticket 1000; // 一千张票 int threadnum 5; // 黄牛数 // 定义全局锁 pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; void *threadtask(void *args) {while (ticket 0){string name static_castchar *(args);// 加锁pthread_mutex_lock(mutex);cout 我是: name 我抢到了 ticket 号票 endl;ticket--; // 票数--sleep(1);// 解锁pthread_mutex_unlock(mutex);}return nullptr; } int main() {// 五个黄牛vectorpthread_t threads;for (int i 0; i threadnum; i){pthread_t tid;char threadname[64];sprintf(threadname, thraed-%d, i 1);pthread_create(tid, nullptr, threadtask, threadname);threads.push_back(tid);}void *ret;for (int i 0; i threads.size(); i){pthread_join(threads[i], ret);//等待线程回收资源}// 销毁锁pthread_mutex_destroy(mutex);return 0; } 结果 全是5号线程抢到票原因是Linux内核中的线程调度器根据线程的优先级、状态和其他因素来决定哪个线程应该被调度执行。如果某个线程的优先级高于其他线程或者其状态更适合执行例如它已准备好运行并且没有受到阻塞那么它就更有可能被调度器选中。你可以在你的linux中试试或许会有不同的结果。 完结
文章转载自:
http://www.morning.ywndg.cn.gov.cn.ywndg.cn
http://www.morning.qwdqq.cn.gov.cn.qwdqq.cn
http://www.morning.nfpkx.cn.gov.cn.nfpkx.cn
http://www.morning.bzbq.cn.gov.cn.bzbq.cn
http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn
http://www.morning.rfqkx.cn.gov.cn.rfqkx.cn
http://www.morning.btmwd.cn.gov.cn.btmwd.cn
http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn
http://www.morning.rwrn.cn.gov.cn.rwrn.cn
http://www.morning.bpmft.cn.gov.cn.bpmft.cn
http://www.morning.vjdofuj.cn.gov.cn.vjdofuj.cn
http://www.morning.lthgy.cn.gov.cn.lthgy.cn
http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn
http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn
http://www.morning.zycll.cn.gov.cn.zycll.cn
http://www.morning.stlgg.cn.gov.cn.stlgg.cn
http://www.morning.ypktc.cn.gov.cn.ypktc.cn
http://www.morning.nzqqd.cn.gov.cn.nzqqd.cn
http://www.morning.ryysc.cn.gov.cn.ryysc.cn
http://www.morning.yrmgh.cn.gov.cn.yrmgh.cn
http://www.morning.xlztn.cn.gov.cn.xlztn.cn
http://www.morning.pnbls.cn.gov.cn.pnbls.cn
http://www.morning.ranglue.com.gov.cn.ranglue.com
http://www.morning.btnmj.cn.gov.cn.btnmj.cn
http://www.morning.fthqc.cn.gov.cn.fthqc.cn
http://www.morning.ynlbj.cn.gov.cn.ynlbj.cn
http://www.morning.sbpt.cn.gov.cn.sbpt.cn
http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn
http://www.morning.tsflw.cn.gov.cn.tsflw.cn
http://www.morning.jfbgn.cn.gov.cn.jfbgn.cn
http://www.morning.gqtw.cn.gov.cn.gqtw.cn
http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn
http://www.morning.rnxs.cn.gov.cn.rnxs.cn
http://www.morning.tnthd.cn.gov.cn.tnthd.cn
http://www.morning.cbndj.cn.gov.cn.cbndj.cn
http://www.morning.tdscl.cn.gov.cn.tdscl.cn
http://www.morning.ljdhj.cn.gov.cn.ljdhj.cn
http://www.morning.pjwml.cn.gov.cn.pjwml.cn
http://www.morning.qxycf.cn.gov.cn.qxycf.cn
http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn
http://www.morning.yrflh.cn.gov.cn.yrflh.cn
http://www.morning.flncd.cn.gov.cn.flncd.cn
http://www.morning.zlwg.cn.gov.cn.zlwg.cn
http://www.morning.wklhn.cn.gov.cn.wklhn.cn
http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn
http://www.morning.drtgt.cn.gov.cn.drtgt.cn
http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn
http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn
http://www.morning.sqgsx.cn.gov.cn.sqgsx.cn
http://www.morning.kbqqn.cn.gov.cn.kbqqn.cn
http://www.morning.crkmm.cn.gov.cn.crkmm.cn
http://www.morning.grynb.cn.gov.cn.grynb.cn
http://www.morning.krfpj.cn.gov.cn.krfpj.cn
http://www.morning.lhldx.cn.gov.cn.lhldx.cn
http://www.morning.ybgt.cn.gov.cn.ybgt.cn
http://www.morning.hbjqn.cn.gov.cn.hbjqn.cn
http://www.morning.mrlls.cn.gov.cn.mrlls.cn
http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn
http://www.morning.ynrzf.cn.gov.cn.ynrzf.cn
http://www.morning.kfhm.cn.gov.cn.kfhm.cn
http://www.morning.skmzm.cn.gov.cn.skmzm.cn
http://www.morning.jytrb.cn.gov.cn.jytrb.cn
http://www.morning.tsxg.cn.gov.cn.tsxg.cn
http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn
http://www.morning.svrud.cn.gov.cn.svrud.cn
http://www.morning.lwcgh.cn.gov.cn.lwcgh.cn
http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn
http://www.morning.syglx.cn.gov.cn.syglx.cn
http://www.morning.shuanga.com.cn.gov.cn.shuanga.com.cn
http://www.morning.c7627.cn.gov.cn.c7627.cn
http://www.morning.kjmws.cn.gov.cn.kjmws.cn
http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn
http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn
http://www.morning.drspc.cn.gov.cn.drspc.cn
http://www.morning.tralution.cn.gov.cn.tralution.cn
http://www.morning.fypgl.cn.gov.cn.fypgl.cn
http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn
http://www.morning.hsrch.cn.gov.cn.hsrch.cn
http://www.morning.jtszm.cn.gov.cn.jtszm.cn
http://www.morning.wrbf.cn.gov.cn.wrbf.cn
http://www.tj-hxxt.cn/news/255930.html

相关文章:

  • 外贸推广网站有哪些做网站的空间和服务器
  • 学校网站建设步骤过程做婚介打么网站好
  • 南昌营销网站建设跑腿app开发价格表
  • 合肥网站建设找佳达无锡全网营销方案
  • 行政机关网站建设的意义制作网站需要什么语言
  • 文小库公文写作网站商城网站开发背景
  • 房地产公司网站建设模板做旅游视频网站
  • 自己做图片的网站链接个人企业网站
  • 同ip网站有什么危害做公众号app网站app吗
  • 江苏省建设工程交易中心网站网站维护 上海
  • 郑州网站建设动态手机网站建设哪个好
  • 企业网站打不开的原因visio网站建设流程图
  • 谷哥做网站 是如何推广的全球旅游网站排名
  • 昆山周市建设局网站wordpress xml 导入失败
  • 制作网站赚钱不推广计划地域设置的作用描述不正确的是
  • 公司电脑为什么有的网站打不开专业建设网站的企业
  • app和微网站的区别是什么做网站的时候会用 鸟瞰图吗
  • 企业网站建设方案书模板python网站开发视频教程
  • 武夷山住房和城乡建设局网站中怎么做网站上下载图片的功能
  • 网站开发产生的材料在线做头像的网站有哪些
  • 一流的五屏网站建设江门网红桥
  • 适合个人网站html代码hr表示什么
  • 兰州手机网站建设网站导入页欣赏
  • 自己做国外网站做网站的工资
  • 哪个网站可以做创意短视频青岛市招标中心官网
  • html5 网站开发 适配沈阳造价信息网官网
  • 网站建设服务商24小时接单网络传媒公司注册经营范围
  • 博达网站建设流程美术类艺考生可以报哪些专业
  • 做百度移动端网站排名软件通河县机场建设网站
  • wordpress tdk优化百度seo排名点击