1. not fair,什么是条件锁?
展开全部
自旋锁(Spin lock)
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是
否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。其作用是为了解决某项资源的互斥使用。因为自旋锁不会引起调用者睡眠,所以自旋锁的效率远
高于互斥锁。虽然它的效率比互斥锁高,但是它也有些不足之处:
1、自旋锁一直占用CPU,他在未获得锁的情况下,一直运行--自旋,所以占用着CPU,如果不能在很短的时 间内获得锁,这无疑会使CPU效率降低。
2、在用自旋锁时有可能造成死锁,当递归调用时有可能造成死锁,调用有些其他函数也可能造成死锁,如 copy_to_user()、copy_from_user()、kmalloc()等。
因此我们要慎重使用自旋锁,自旋锁只有在内核可抢占式或SMP的情况下才真正需要,在单CPU且不可抢占式的内核下,自旋锁的操作为空操作。自旋锁适用于锁使用者保持锁时间比较短的情况下。
两种锁的加锁原理
互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。
自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。
互斥锁属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和
Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞
(blocking),Core0 会在此时进行上下文切换(Context
Switch)将线程A置于等待队列中,此时Core0就可以运行其他的任务(例如另一个线程C)而不必进行忙等待。而自旋锁则不然,它属于busy-waiting类型的锁,如果线程A是使用pthread_spin_lock操作去请求锁,那么线程A就会一直在
Core0上进行忙等待并不停的进行锁请求,直到得到这个锁为止。
两种锁的区别
互斥锁的起始原始开销要高于自旋锁,但是基本是一劳永逸,临界区持锁时间的大小并不会对互斥锁的开销造成影响,而自旋锁是死循环检测,加锁全程消耗cpu,起始开销虽然低于互斥锁,但是随着持锁时间,加锁的开销是线性增长。
两种锁的应用
互斥锁用于临界区持锁时间比较长的操作,比如下面这些情况都可以考虑
1 临界区有IO操作
2 临界区代码复杂或者循环量大
3 临界区竞争非常激烈
4 单核处理器
至于自旋锁就主要用在临界区持锁时间非常短且CPU资源不紧张的情况下,自旋锁一般用于多核的服务器。
lock与Syntronized的区别
转自自:
java并发之Lock与synchronized的区别
1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;
2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;
3)Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;
4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。
5)Lock可以提高多个线程进行读操作的效率。
在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。
两者在锁的相关概念上区别:
1.可重入锁
如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行方法method2。
看下面这段代码就明白了:
1
2
3
4
5
6
7
8
9
class MyClass
{
public synchronized void method1()
{
method2();
}
public synchronized void method2()
{
}
}
上述代码中的两个方法method1和method2都用synchronized修饰了,假如某一时刻,线程A执行到了method1,此时线程A获取了这个对象的锁,而由于method2也是synchronized方法,假如synchronized不具备可重入性,此时线程A需要重新申请锁。但是这就会造成一个问题,因为线程A已经持有了该对象的锁,而又在申请获取该对象的锁,这样就会线程A一直等待永远不会获取到的锁。
而由于synchronized和Lock都具备可重入性,所以不会发生上述现象。
2.可中断锁
可中断锁:顾名思义,就是可以相应中断的锁。
在Java中,synchronized就不是可中断锁,而Lock是可中断锁。
如果某一线程A正在执行锁中的代码,另一线程B正在等待获取该锁,可能由于等待时间过长,线程B不想等待了,想先处理其他事情,我们可以让它中断自己或者在别的线程中中断它,这种就是可中断锁。
在前面演示lockInterruptibly()的用法时已经体现了Lock的可中断性。
3.公平锁
公平锁即尽量以请求锁的顺序来获取锁。比如同是有多个线程在等待一个锁,当这个锁被释放时,等待时间最久的线程(最先请求的线程)会获得该所,这种就是公平锁。
非公平锁即无法保证锁的获取是按照请求锁的顺序进行的。这样就可能导致某个或者一些线程永远获取不到锁。
在Java中,synchronized就是非公平锁,它无法保证等待的线程获取锁的顺序。
而对于ReentrantLock和ReentrantReadWriteLock,它默认情况下是非公平锁,但是可以设置为公平锁。
看一下这2个类的源代码就清楚了:
在ReentrantLock中定义了2个静态内部类,一个是NotFairSync,一个是FairSync,分别用来实现非公平锁和公平锁。
我们可以在创建ReentrantLock对象时,通过以下方式来设置锁的公平性:
1
ReentrantLock
lock = new ReentrantLock(true);
如果参数为true表示为公平锁,为fasle为非公平锁。默认情况下,如果使用无参构造器,则是非公平锁。
另外在ReentrantLock类中定义了很多方法,比如:
isFair() //判断锁是否是公平锁
isLocked() //判断锁是否被任何线程获取了
isHeldByCurrentThread() //判断锁是否被当前线程获取了
hasQueuedThreads() //判断是否有线程在等待该锁
在ReentrantReadWriteLock中也有类似的方法,同样也可以设置为公平锁和非公平锁。不过要记住,ReentrantReadWriteLock并未实现Lock接口,它实现的是ReadWriteLock接口。
4.读写锁
读写锁将对一个资源(比如文件)的访问分成了2个锁,一个读锁和一个写锁。
正因为有了读写锁,才使得多个线程之间的读操作不会发生冲突。
ReadWriteLock就是读写锁,它是一个接口,ReentrantReadWriteLock实现了这个接口。
可以通过readLock()获取读锁,通过writeLock()获取写锁。
性能比较
在JDK1.5中,synchronized是性能低效的。因为这是一个重量级操作,它对性能最大的影响是阻塞的是实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性带来了很大的压力。相比之下使用Java提供的Lock对象,性能更高一些。Brian
Goetz对这两种锁在JDK1.5、单核处理器及双Xeon处理器环境下做了一组吞吐量对比的实验,发现多线程环境下,synchronized的吞吐量下降的非常严重,而ReentrankLock则能基本保持在同一个比较稳定的水平上。但与其说ReetrantLock性能好,倒不如说synchronized还有非常大的优化余地,于是到了JDK1.6,发生了变化,对synchronize加入了很多优化措施,有自适应自旋,锁消除,锁粗化,轻量级锁,偏向锁等等。导致在JDK1.6上synchronize的性能并不比Lock差。官方也表示,他们也更支持synchronize,在未来的版本中还有优化余地,所以还是提倡在synchronized能实现需求的情况下,优先考虑使用synchronized来进行同步。
2. fair和equal有什么区别?
fair和equal有区别为
fair释义:
adj. 公平的;美丽的,白皙的;[气象] 晴朗的
adv. 公平地;直接地;清楚地
vi. 转晴
n. 展览会;市集;美人
n. (Fair)人名;(英、芬)费尔
equal释义:
adj. 平等的;相等的;胜任的
vt. 等于;比得上
n. 对手;匹敌;同辈;相等的事物
例句:
They joined the company at the same time after graduation, but their salaries were not equal.
他们同时毕业后加入公司,但薪资却不平等。
3. itsnotfalr什么意思?
it s not fair这是不公平的双语对照例句:
1.Lt` s not interesting when talking to me? 和我聊天是不是很没劲?
2.That's not fair, he's got two. 太不公平了。他有两个学生
4. 比尔盖茨的十大人生定律对照?
Life is not fair, get used to it.
译:生活是不公平的;要去适应它。
这是比尔盖茨的十大经典人生定律之一。
5. nor的用法区别?
两个否定意思:not…or/ not…nor
如果not否定的是两个或两个以上的动词、名词、形容词等,通常用or来加以连接。
He doesn’t smoke or drink. 他不吸烟也不喝酒。
(不能说:He doesn’t smoke nor drink.)
She wasn’t happy or upset. 她既不生气,也不苦恼。
It’s not on the table or in the cupboard. 它既不在餐桌上,也不在食橱里。
然而,短暂的停顿后面可以用nor,以分隔和强调第二个动词、形容词等。
Our main need is not food, nor money. It is education.
我们的主要需求不是食物,也不是钱,而是教育。(比…food or money更为强调。)
She didn’t phone that day, northe next day.
她那天没打电话,第二天也没有打。(比…or the next day更为强调。)
《柯林斯高级英语用法词典》第569页nor连接表示否定的分句。
nor置于第二个分句句首,后接助动词、情态动词或动词be,再接主语,再后如有主动词,接主动词。
The officer didn’t believe me, nor did the girls when they came back.
那位官员不相信我,而那些女孩回来后也不相信。
This argument fails to explain how the present developed countries were able to progress, nordoes it explain the recent success of some of the developing countries.
这条论据并没能对当今发达国家是怎样得到发展的作出解释,同样,对一些发展中国家最近所取得的成功也未作出解释。
and或but可以置于nor之前。
I would have nothing to do with it, and norwould most of us.
我对此无任何关系,我们大多数人也一样。
Institutions of learning are not taxed; but nor,in many cases, are they much respected.
学术机构不用上税,不过大多数情况下它们也得不到尊重。
nor通常不置于句首,但有时为了使句子更有力或更富有戏剧性也置于句首。
Despite these strong calls, there has been little official action. Nor has the government shown interest in assessing energy conservation’s cost-effectiveness. 尽管呼声强烈,但官方一直没有采取行动,而政府对评估保护能源的费用的有效程度也没表现出任何兴趣。
I do not want these letters. Nor do I even want any copies.
我不想要这些信,一封都不想要。
《柯林斯高级英语用法词典》第630页or与否定词连用。
在否定词后面用or而不用and。
例如:我不喜欢咖啡或茶。
误:I do not like coffee and tea.
正:I do not like coffee or tea.
The situation is just not fair on the children or their parents.
这情形对孩子们或家长们都不公平。
Price is not always an indicator of quality or suitability.
价格不总是质量或适用性的指示物。
I am not detached or remote. 我没有感到孤立或疏远。
The reflectors still work because they have no batteries or circuits to wear out.
反射器仍然在工作,因为它们没有电池或电路损耗。
你怎么使用not or与not nor?
《葛传槼英语惯用法词典》第391页nor词条
nor前面也可以有and。例如:You cannot do that, and nor can I.
但and nor远不及nor普通。偶尔在nor前面用but。
例如:I didn’t see it, but nor did you.
He can neither read nor write里当然用nor,不可用or,He cannot either read or write里当然用or,不可用nor。
He cannot read nor/or write里用or或nor都可以,现在用or比用nor普通。
但He cannot read, nor write(read后面有逗号)和He does not ride, nor shoot, nor fish, nor swim(ride, shoot和fish后面都有逗号)里的nor都不可改作or。
注意下面每组里的两句:
Jack had no tea or coffee. (没有逗号)
Jack had no tea, nor coffee. (有逗号)
He has never heard of her or of her sister. (没有逗号)
He has never heard of her, nor of her sister. (有逗号)
“他不曾去,也不会去”可以说He did not go, nor will be或He did not come and will not,不可说He did not come or will not。
《文馨当代英汉词典》第1256页nor词条
She has no experience in typing, or does the skill interest her. ——这种说法是不可以的。
不过,She has no experience or interest in typing. (她对于打字没有经验,也没有兴趣)这种说法是好的。
They will not permit the change of the plan, or even think of it. (他们不允许计划的变更,甚至不会想到变更)= They will not permit the change of the plan, nor will they even think of it.
——这种句子里,如果后半部为不含有主语和谓语动词的不完整从句时,可以用or。
综合上述可见:
1)在(一分句为否定句,其后)有逗号,且另一分句中主语、谓语俱全的情形下,使用nor。
2)nor是否定两者或两者以上内容,句中有三个以上的被否定项,常使用nor。
3)在前有and或but时,使用nor,而非or,即and nor或but nor。
4)no/not/never大多与or搭配使用。
(当然也有not…nor更为强调语气的情形存在,但并不多见,也不建议这样使用。)
5)either…or…,neither…nor…与He can’t/cannot read or(或用nor,但不多见)write算是固定搭配。
【注意】这里没有讨论前句为肯定句,而后的分句前使用nor或or的情景。
6. 有哪些电影中的台词让你久久不能忘却?
台词,是构成电影灵魂的重要组成部分,电影中有的台词抒发情感,有的台词表达思想,一段段跳跃的文字让我们久久不能忘怀,下面就让我们说说自己最喜欢的台词!
7. 英格玛一首走秀的歌曲?
1,Chanel 2010春夏高级成衣 Lily Allen - Not Fair2,09维多利亚的秘密内衣秀(好几个,最众所周知)开场——黑眼豆豆boom boom pow3,经典走秀音乐Last Tango In Paris巴黎最后的探戈 YUMEJR’S THEME---花样的年华 CHILDREN DAWN BLESSING---孩子们清晨的问候 TEACHERS 师者 KELLY WATCH THE STARS---出发 WHATEVER LOLA WANTS---无论罗拉要什么TWE MUCH---加倍 IN THE LIGHT---发光体 ALL I WANNA GIVE---都给你 HERMOSA MARLA---海洋生物 ANIMA---阿密娜