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

做网站多少钱一般怎么制作自己的小网站

做网站多少钱一般,怎么制作自己的小网站,北京模板建站软件,网站优化是什么意思文章目录 前言一、为什么要线程互斥原子性 二、互斥锁互斥锁的创建与销毁互斥锁进行互斥 前言 前几节课#xff0c;我们学习了多线程的基础概念#xff0c;这节课#xff0c;我们来对线程互斥和互斥锁的内容进行学习。 一、为什么要线程互斥 首先我们要明白#xff0c;对… 文章目录 前言一、为什么要线程互斥原子性 二、互斥锁互斥锁的创建与销毁互斥锁进行互斥 前言 前几节课我们学习了多线程的基础概念这节课我们来对线程互斥和互斥锁的内容进行学习。 一、为什么要线程互斥 首先我们要明白对于多线程其实就是多个执行流在同时执行各自的代码。 而有的时候我们多个执行流可能会同时访问到同一份资源我们称这种资源叫做临界资源而我们各个执行流访问这些临界资源的代码就叫做临界区。 当我们多个执行流访问临界资源时就可能由于OS的线程时间调度问题导致临界资源出现紊乱问题所以对于这种情况我们就需要线程互斥来保护临界资源。 示例代码 #include iostream #include unistd.h #include cstdio #include pthread.h #include string #define TNUM 5int ticket 10000;void *grab(void *args) {const std::string name (char *)args;while (1){// --- 临界区if (ticket 0){usleep(1000);printf(%s : sells ticket:%d\n, name.c_str(), ticket);ticket--;// --- 临界区}else{break;}}return nullptr; }int main() {pthread_t tid[TNUM];for (int i 0; i TNUM; i){char name[64];snprintf(name, sizeof name, new thread %d, i 1);pthread_create(tid i, nullptr, grab, (void *)name);usleep(10000);}for (int i 0; i TNUM; i){pthread_join(tid[i], nullptr);}return 0; }如同此代码这是一个抢票系统的简易代码五个线程都执行抢票代码对全局变量ticket进行–操作。 这串代码看上去似乎没有问题但是在多线程的情况下就可能会导致问题。 可是为什么呢 我们的if判断不是如果ticket0就break吗 这是因为我们的–操作在汇编角度其实是三条语句。 第一步是将内存中的ticket move 到 寄存器中 第二步才是进行计算操作 第三步是将新计算的ticket move 到内存中 而操作系统在进行线程调度的时候可不是管你是进行到第一步可能你才刚执行完第一步你的时间片就到了然后你就被操作系统丢到运行队列末尾了这就可能会导致临界资源不正常。 原子性 解答这个问题就需要提出一个概念。叫做原子性。 原子性就是 我们要么不做要么就把这件事做完而通常而言我们可以理解为一条汇编就是原子性的。 二、互斥锁 对于多线程库pthread也必然会考虑到上面这种问题所以就设计了互斥锁来保护我们的临界资源 man 3 pthread_mutex_destroy man 3 pthread_lock man 3 pthread_unlock 互斥锁的创建与销毁 man 3 pthread_mutex_init int pthread_mutex_destroy(pthread_mutex_t *mutex); 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 就是pthread库给我们提供的锁的数据结构。 参数pthread_mutex_t* restrict_mutex 是我们需要初始化的锁。 参数const pthread_mutexattr_t *restrict attr 我们这里不做考虑设为nullptr即可。 需要注意的是 对于mutex互斥锁的创建和初始化有两种。 第一种是对于静态或全局的pthread_mutex_t 我们可以使用 pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; 这种方式直接进行初始化而不需要调用pthread_mutex_init函数也不需要再调用 pthread_mutex_destroy进行销毁 第二种是对于局部的pthread_mutex_t 我们就必须要调用 pthread_mutex_init来进行初始化最后再调用 pthread_mutex_destroy进行销毁。 互斥锁进行互斥 man 3 pthread_mutex_lock #include pthread.h int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); 将mutex 理解为一把锁且这把锁只有一把钥匙 pthread_mutex_lock函数是申请锁的钥匙申请到了锁的钥匙则可以继续向下执行如果没有申请到则挂起等待。 pthread_mutex_unlock函数就是归还钥匙。 这是lock的伪代码意思就是将0放入到寄存器%al中然后%al寄存器中的数据与内存中的mutex数据交换本质就是共享-私有的过程将唯一锁变成私有的。 需要注意的是在汇编中exchan是一条汇编代表这是原子性的也就保证了锁的安全性。 这是unlock的伪代码将1存入到内存中的mutex中。 #include iostream #include unistd.h #include cstdio #include pthread.h #include string #define TNUM 5int ticket 10000;pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER;void *grab(void *args) {const std::string name (char *)args;while (1){pthread_mutex_lock(mutex);// --- 临界区if (ticket 0){usleep(1000);printf(%s : sells ticket:%d\n, name.c_str(), ticket);ticket--;// --- 临界区pthread_mutex_unlock(mutex);}else{pthread_mutex_unlock(mutex);break;}usleep(1000);//抢完票的后续动作}return nullptr; }int main() {pthread_t tid[TNUM];for (int i 0; i TNUM; i){char name[64];snprintf(name, sizeof name, new thread %d, i 1);pthread_create(tid i, nullptr, grab, (void *)name);usleep(10000);}for (int i 0; i TNUM; i){pthread_join(tid[i], nullptr);}return 0; }加入了互斥锁之后结果就没有问题了。
http://www.zqtcl.cn/news/921340/

相关文章:

  • 台州seo网站排名优化外包服务公司
  • 汉川网站推广服务网页站点不安全
  • wdcp网站搬家嘉兴做网站优化的公司
  • 网站规划和建设度假区网站建设方案
  • 做网站前端用什么软件好在线种子资源网
  • 怎样修改网站关键词昌平做网站的公司
  • 网站建设调研文档网站最下面版权模板
  • 建外贸网站有效果吗开发电商平台需要多少钱
  • 成都网站建设维护网页制作价格私活
  • 建设银行网站登陆不上做本地的分类信息网站
  • 公司网站建设哪里实惠网页设计作业百度网盘
  • 如何seo网站挣钱不同企业的网络营销网站
  • 自己做网站有什么用网站怎样设计网址
  • 做任务的网站有那些wordpress链接在哪里
  • 免费建站模板网站招聘网站哪个好
  • 网站建站推广是啥意思高端网站建设浩森宇特
  • 长治电子商务网站建设中国建设银行总行官方网站
  • 整站营销系统厚街镇网站仿做
  • 舆情分析网站wordpress文章聚合
  • 中国建设银行网站在哪上市cpa自己做网站
  • 网站建设服务支持jquery插件 wordpress
  • 最有效的100个营销方法seo工作室
  • wordpress o2o主题嘉兴网站优化联系方式
  • 网站建设最基础的是什么网站怎么做架构
  • 网站底部怎么修改网站服务器是干什么的
  • 网络营销是营销的网络化吗广州推广seo
  • 茌平做网站推广网站刷链接怎么做的
  • 东莞网站优化推广Wordpress的根目录在哪
  • 备案的网站建设书是什么意思跨境电商代运营公司十强
  • 网站建设的功能要求wordpress typo3