chapter13_显式锁_3_公平性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/captxb/article/details/88648703
  • (1) 在ReentrantLock的构造函数中可以指定创建公平性的锁还是非公平性的锁

      /**
       * Creates an instance of {@code ReentrantLock} with the
       * given fairness policy.
       *
       * @param fair {@code true} if this lock should use a fair ordering policy
       */
      public ReentrantLock(boolean fair) {
          sync = fair ? new FairSync() : new NonfairSync();
      }
    

    (2)

    公平锁, 线程将按照它们请求锁的顺序获得锁;

    非公平锁, 如果一个线程请求它, 并且在发出请求的同时恰好锁的状态变为可用, 则这个线程__“插队”__获得这个锁

    (3) 非公平锁的性能一般好于公平锁

    其中一个原因是__恢复一个线程到这个线程真正开始运行中间存在时间差__, 非公平锁可以利用这段时间就把锁获得到

展开阅读全文

显式实例化和显式具体化

08-22

大家好~!!rn我在看 C++ Primer Plus ,作者在介绍函数模板的显式实例化和显式具体化的时候,有下面这样的一句话:rn[img=https://img-bbs.csdn.net/upload/201308/22/1377114371_331099.png][/img]rnrn对句话不太理解,是不是不能像下面这样做?rn[code=c]template //templaternvoid foo(T t)rnrn cout << t << endl;rn return;rnrnrntemplate void foo(double); //Instantiationrnrntemplate <> void foo(double d) //Specializationrnrn cout << "this is " << d << endl;rnrnrnint main(int argv, char **argc)rnrn foo(1.0);rn return 0;rn[/code]rn上面的g++和VS都报错了:rng++:error: specialization of 'void foo(T) [with T = double]' after instantiationrnVS:error C2908: 显式专用化;已实例化“void foo(double)”rnrn按照g++的意思,难到instantiation放到specialization前面就可以了吗?rn[code=c]rntemplate //templaternvoid foo(T t)rnrn cout << t << endl;rn return;rnrnrntemplate <> void foo(double d) //Specializationrnrn cout << "this is " << d << endl;rnrnrntemplate void foo(double); //Instantiationrnrnint main(int argv, char **argc)rnrn foo(1.0);rn return 0;rnrn[/code]rn结果,g++确实不报错了,也没有警告,而VS依然报错:rnerror C3416: “foo”: 显式专用化可能无法显式实例化rnrn我想,那句话就是这个意思。而g++不报错,是不是因为模板函数在匹配类型的时候,具体化是优先于常规模板的,编译到Specialization的时候,找到匹配的了,然后就把Instantiation优化掉了??不作处理了??而且VS的错误信息有“可能”二字。。。rnrn这只是我的胡乱猜想,请大家多多指教! 谢谢!!rnrn 论坛

没有更多推荐了,返回首页