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

专业的河南网站建设百度指数资讯指数是指什么

专业的河南网站建设,百度指数资讯指数是指什么,潍坊网站的优化,摄影摄像网站建设C11并发与多线程笔记#xff08;12#xff09; windows临界区、其他各种mutex互斥量 1、windows临界区2、自动析构技术3、递归独占互斥量 std::recursive_mutex4、带超时的互斥量 std::timed_mutex 和 std::recursive_timed_mutex4.1 std::timed_mutex#xff1a;是带超时的… C11并发与多线程笔记12 windows临界区、其他各种mutex互斥量 1、windows临界区2、自动析构技术3、递归独占互斥量 std::recursive_mutex4、带超时的互斥量 std::timed_mutex 和 std::recursive_timed_mutex4.1 std::timed_mutex是带超时的独占互斥量4.2 std::recursive_timed_mutex是带超时的递归独占互斥量 1、windows临界区 Windows临界区同一个线程是可以重复进入的但是进入的次数与离开的次数必须相等。 C互斥量则不允许同一个线程重复加锁 (相同的mutex变量不容许连续调用。 windows临界区是在windows编程中的内容了解一下即可效果几乎可以等同于c11的mutex 包含**#include windows.h** windows中的临界区同mutex一样可以保护一个代码段。但windows的临界区可以进入多次离开多次但是进入的次数与离开的次数必须相等不会引起程序报异常出错。 #include iostream #include thread #include list #include mutex #include Windows.h#define __WINDOWSJQ_using namespace std;class A { public:// 把收到的消息传入队列void inMsgRecvQueue(){for (size_t i 0; i 10000; i){cout 收到消息并放入队列 i endl; //windows开关 #ifdef __WINDOWSJQ_ EnterCriticalSection(my_winsec); // 进入临界区//EnterCriticalSection(my_winsec); // 可以再次进入临界区,程序不会出错msgRecvQueue.push_back(i);LeaveCriticalSection(my_winsec); // 离开临界区//LeaveCriticalSection(my_winsec); // 如果进入两次必须离开两次不会报错 #elsemy_mutex.lock();msgRecvQueue.push_back(i);my_mutex.unlock(); #endif // __WINDOWSJQ_}cout 消息入队结束 endl;}// 从队列中取出消息void outMsgRecvQueue(){for (size_t i 0; i 10000; i){ #ifdef __WINDOWSJQ_EnterCriticalSection(my_winsec); // 进入临界区if (!msgRecvQueue.empty()){// 队列不为空int num msgRecvQueue.front();cout 从消息队列中取出 num endl;msgRecvQueue.pop_front();}else{// 消息队列为空cout 消息队列为空 endl;}LeaveCriticalSection(my_winsec); // 离开临界区 #elsemy_mutex.lock();if (!msgRecvQueue.empty()){// 队列不为空int num msgRecvQueue.front();cout 从消息队列中取出 num endl;msgRecvQueue.pop_front();my_mutex.unlock();}else{// 消息队列为空cout 消息队列为空 endl;my_mutex.unlock();} #endif // __WINDOWSJQ_}cout 消息出队结束 endl;}A(){ #ifdef __WINDOWSJQ_InitializeCriticalSection(my_winsec); // 用临界区之前要初始化 #endif // __WINDOWSJQ_}private:listint msgRecvQueue;mutex my_mutex;#ifdef __WINDOWSJQ_CRITICAL_SECTION my_winsec; // windows中的临界区非常类似C11中的mutex,使用之前必须初始化 #endif // __WINDOWSJQ_};int main() {A myobj;thread myInMsgObj(A::inMsgRecvQueue, myobj);thread myOutMsgObj(A::outMsgRecvQueue, myobj);myInMsgObj.join();myOutMsgObj.join();getchar();return 0; }2、自动析构技术 Clock_guard防止忘了释放信号量自动释放 windows可以写个类自动释放临界区 //本类用于自动释放windows下的临界区防止忘记LeaveCriticalSection导致死锁情况的发生 class CWinLock {//RALL类 public:CWinLock(CRITICAL_SECTION *pCritmp)//构造函数{my_winsec pCritmp;EnterCriticalSection(my_winsec);//进入}~CWinLock()//析构函数{LeaveCriticalSection(my_winsec);//离开} private:CRITICAL_SECTION *my_winsec; };class A { public:// 把收到的消息传入队列void inMsgRecvQueue(){for (size_t i 0; i 10000; i){cout 收到消息并放入队列 i endl; //windows开关 #ifdef __WINDOWSJQ_ CWinLock wlock(my_winsec);//调用msgRecvQueue.push_back(i); #elsemy_mutex.lock();msgRecvQueue.push_back(i);my_mutex.unlock(); #endif // __WINDOWSJQ_}cout 消息入队结束 endl;} };上述这种类RAII类Resource Acquisition is initialization即资源获取及初始化。容器智能指针属于这种类。 3、递归独占互斥量 std::recursive_mutex std::mutex 独占式互斥量自己lock时别人lock不了std::recursive_mutex允许在同一个线程中同一个互斥量多次被 lock()但是递归加锁的次数是有限制的太多可能会报异常效率要比mutex低。 void testfunc1(){std::lock_guardstd::mutex sbguard(my_mutex);//...干各种事情testfunc2();//多次加锁异常 } void testfunc2(){std::lock_guardstd::mutex sbguard(my_mutex);//...干各种另外一些事情 }如果你真的用了 recursive_mutex 要考虑代码是否有优化空间如果能调用一次 lock()就不要调用多次。 4、带超时的互斥量 std::timed_mutex 和 std::recursive_timed_mutex 4.1 std::timed_mutex是带超时的独占互斥量 1. try_lock_for()等待一段时间 如果拿到了锁或者超时了未拿到锁就继续执行有选择执行如下 std::chrono::milliseconds timeout(100); if (my_mymutex.try_lock_for(timeout)){//......拿到锁返回turemy_mymutex.unlock();//用完了要解锁 }else{//没拿到锁不会卡着流程继续往下走 }2. try_lock_until()参数是一个未来的时间点 在这个未来的时间没到的时间内如果拿到了锁头流程就走下来如果时间到了没拿到锁流程也可以走下来。 std::chrono::milliseconds timeout(100); if (my_mymutex.try_lock_until(chrono::steady_clock::now() timeout)){//......拿到锁返回turemy_mymutex.unlock();//用完了要解锁 } else{//没拿到锁不会卡着流程继续往下走 }两者的区别就是一个参数是时间段一个参数是时间点 4.2 std::recursive_timed_mutex是带超时的递归独占互斥量 允许同一个线程多次获取这个互斥量
http://www.dnsts.com.cn/news/82581.html

相关文章:

  • 塘厦网站建设公司宝山苏州网站建设
  • 泉州网站建设网站石铜路网站建设
  • 电商网站开发需要多少钱食品包装设计公司
  • 建网站那个网最好网页设计与制作实例教程第2版答案
  • 网站建设有限公怎么用ps做网站超链接
  • 怎们自己做网站学历提升培训机构
  • 站长之家网站排名营销型网站的评价标准
  • 体育论坛网站建设凡科做的网站推效果
  • 怎么能自己做网站装饰公司营销网站建设
  • 郴州网站建设的公司WordPress漏洞在线扫描
  • 商城网站服务器如何选定目标关键词及网站栏目名称的确定
  • 好看的网站模板苏州工业园区地图
  • 如何做网站淘宝客施工企业会计制度
  • 网站使用支付接口如何收费开源低代码开发平台
  • 阿克苏市建设局网站前端开发培训哪里好
  • 康定网站建设工作室seo是什么技术
  • 杭州网站建设维护域名备案费用
  • 网站建设中 很快回来网站设计与制作的基本步骤
  • 外贸建站的公司河北做网站电话
  • 高端网站建设公司有必要做吗网站做专题
  • 网站培训制度建设企业银行网站
  • 汽车之家这样的网站怎么做wordpress 后台上传
  • 漫画网站开发说明优化网站的步骤案列
  • 小程序网站模板网站建设优化推广安徽
  • 北京如何优化网站wordpress源代码如何在本地编辑器
  • 网站开发与设计实训网站建设需求分析的功能
  • 怎么做个手机版的网站卖车网站
  • iis6.1添加网站手机端网站的区别
  • 网站导航栏注明做网络建设可行性分析
  • 网页站点的用途在百度怎么发布作品