无锁多线程,多线程 无锁

http://www.itjxue.com  2023-01-23 03:14  来源:未知  点击次数: 

java多线程中的死锁,活锁,饥饿,无锁都是什么鬼

死锁发生在当一些进程请求其它进程占有的资源而被阻塞时。

另外一方面,活锁不会被阻塞,而是不停检测一个永远不可能为真的条件。除去进程本身持有的资源外,活锁状态的进程会持续耗费宝贵的CPU时间。

最后,进程会处于饥饿状态是因为持续地有其它优先级更高的进程请求相同的资源。不像死锁或者活锁,饥饿能够被解开。例如,当其它高优先级的进程都终止时并且没有更高优先级的进程到达。

多线程编程的时候,使用无锁结构会不会比有锁结构更加快

会,使用无锁结构有要保证并发安全难度相当高。控制不好还不如用锁安全。无锁结构只能在某些特定场景用。cpu提供多少无锁安全设计,建议用多少,一般语言库已经实现好,能使用的功能有限。

多线程之无锁队列

字面意思理解,就是两个线程同步操作某种数据时,不能加锁;

因为加锁是会拖慢效率,造成延时的;

最典型的是生产者和消费者模型,要求生产者生产的同时,进行消费,这就要求足够的低延时,此时可以使用无锁队列;

比如:

线程A生产 1,2,3,4...

线程B对生产出来的数相加,要求效率足够高,不能用锁,此时就可以用无锁队列。

(责任编辑:IT教学网)

更多

推荐编程综合文章