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

中企动力建站怎么样支付网站建设费用做账

中企动力建站怎么样,支付网站建设费用做账,做网站需要多少屏,深圳室内设计培训一、多线程不加线程互斥可能会引发的问题 下面是一个抢标逻辑。抢票为什么会抢到负数#xff1a;假设当票数为1时#xff0c;此时四个进程的判断条件tickets都大于0#xff0c;都会进入抢票操作#xff0c;第一个进程抢完票以后tickets0并写回内存#xff0c;第二个进程再…一、多线程不加线程互斥可能会引发的问题 下面是一个抢标逻辑。抢票为什么会抢到负数假设当票数为1时此时四个进程的判断条件tickets都大于0都会进入抢票操作第一个进程抢完票以后tickets0并写回内存第二个进程再从内存中读取tickets的值时此时tickets已经为0再做--就变成了-1tickets为负数就是这么来的。也就是说多线程代码如果不对共享资源做保护可能会有并发问题。 二、互斥锁 2.1、静态分配锁 如果你定义的锁是静态的或者是全局的可以直接初始化成 pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER 2.2、动态分配锁销毁锁 int pthread_mutex_init(pthread_mutex_t *restrict mutexconst pthread_mutexattr_t *restrict attr); 参数mutex要初始化的互斥量attr NULL。 int pthread_mutex_destroy(pthread_mutex_t *mutex) 注意 使用 PTHREAD_ MUTEX_ INITIALIZER 初始化的互斥量不需要销毁。 2.3、加锁解锁 int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); 返回值:成功返回0,失败返回错误号 。 pthread_mutex_lock函数如果申请锁成功就会继续向后运行如果申请失败该函数就会阻塞不允许继续向后运行。 加锁的粒度要越细越好。 三、加锁的底层理解 movb $0%al表示将0存入%al寄存器中%al是累加寄存器AX的低8位部分可以独立作为8位寄存器使用。 xchgb %al, mutex表示交换%al寄存器中的值和内存mutex中的值如果内存mutex中的值原本是1交换完则表示得到锁否则挂起等待。unlock中将1存入mutex内存中表示归还锁。这样无论如何得到1的线程始终只会有一个也就做到了线程互斥。 四、多线程实现简单的互斥抢票 //thread.hpp #ifndef __THREAD_HPP__ #define __THREAD_HPP__#include iostream #include string #include unistd.h #include functional #include pthread.hnamespace ThreadModule {templatetypename Tusing func_t std::functionvoid(T);// typedef std::functionvoid(const T) func_t;templatetypename Tclass Thread{public:void Excute(){_func(_data);}public:Thread(func_tT func, T data, const std::string namenone-name): _func(func), _data(data), _threadname(name), _stop(true){}//记住此方法static void *threadroutine(void *args) // 类成员函数形参是有this指针的{ThreadT *self static_castThreadT *(args);self-Excute();return nullptr;}bool Start(){int n pthread_create(_tid, nullptr, threadroutine, this);if(!n){_stop false;return true;}else{return false;}}void Detach(){if(!_stop){pthread_detach(_tid);}}void Join(){if(!_stop){pthread_join(_tid, nullptr);}}std::string name(){return _threadname;}void Stop(){_stop true;}~Thread() {}private:pthread_t _tid;std::string _threadname;T _data;func_tT _func;bool _stop;}; } #endif //LockGuard.hpp #ifndef __LOCK_GUARD_HPP__ #define __LOCK_GUARD_HPP__#include iostream #include pthread.hclass LockGuard { private:pthread_mutex_t* _mutex; public:LockGuard( pthread_mutex_t* mutex):_mutex(mutex){pthread_mutex_lock(_mutex);}~LockGuard(){pthread_mutex_unlock(_mutex);}};#endif //testThread.cc #include iostream #include vector #include LockGuard.hpp #include Thread.hpp using namespace ThreadModule;int g_tickets 10000; const int num 4;class ThreadData { public:int _tickets; // 所有的线程最后都会引用同一个全局的g_ticketsstd::string _name;int _total;pthread_mutex_t _mutex;public:ThreadData(int tickets, const std::string name, pthread_mutex_t mutex): _tickets(tickets), _name(name), _total(0), _mutex(mutex){}~ThreadData(){} };void route(ThreadData *td) {while (true){LockGuard guard(td-_mutex);if (td-_tickets 0){usleep(1000);printf(%s running, get tickets: %d\n, td-_name.c_str(), td-_tickets); td-_tickets--; td-_total;}elsebreak;} }int main() {pthread_mutex_t mutex;pthread_mutex_init(mutex,nullptr);std::vectorThreadThreadData* threads;std::vectorThreadData * datas;//1、创建一批线程for(int i 0; inum; i){std::string name thread- std::to_string(i1);ThreadData* td new ThreadData(g_tickets, name, mutex);threads.emplace_back(route, td, name);datas.emplace_back(td);}// 2. 启动 一批线程for (auto thread : threads){thread.Start();}// 3. 等待一批线程for (auto thread : threads){thread.Join();}sleep(1);// 4. 输出统计数据for (auto data : datas){std::cout data-_name : data-_total std::endl;delete data;}pthread_mutex_destroy(mutex);return 0; }
http://www.w-s-a.com/news/988173/

相关文章:

  • 做网站得花多钱乡村振兴网站建设
  • 站设计培训课程wordpress自动回复
  • 上海闵行区 网站建设永久免费crm软件下载
  • 天津营销网站建设公司排名台州网站排名公司
  • 环保网站 怎么做物流网站的功能与特色
  • 网站多久才会被收录服务器租用泰海
  • 电商网站建设合同模板临汾推广型网站建设
  • 天猫商务网站建设目的长春网站设计
  • 公司网站建设会议纪要昆山高端网站建设机构
  • 做消费网站流程深圳网站设计价格
  • 做电影网站怎么接广告中国最新军事新闻视频
  • 网站推广设计做哪些设置自动删除的wordpress
  • 东莞东坑网站设计专业网站制作设
  • 网站怎么做现场直播视频成都科技网站建设找
  • 个人网页设计步骤网站没有内容 能做优化吗
  • 专业网站建设公司招聘网站排行榜
  • 网站建设规范方法企业解决方案架构
  • ae做网站导航wordpress门户
  • 重庆市网站备案材料云南做网站
  • 网页设计模板网站免费珠海视窗网
  • 茂名模板建站定制WordPress注册不提示
  • 陕西营销型手机网站建设深圳制作网站服务
  • 受欢迎的锦州网站建设Wordpress 图片左右滑动
  • 湖南优化网站建设线上网站建设需求
  • 建什么类型的网站访问量比较大哪些外包公司比较好
  • php网站地图外贸建站哪家强外贸网站怎么做
  • 宁波五金网站建设中国建筑网官网投诉查询
  • 哪个网站注册域名便宜免费流程图制作网站
  • 潍坊做网站南宁网站seo优化公司
  • 网站建设的基本技术步骤无网站营销