你的位置:首页 > 软件开发 > ASP.net > 并发思想提炼(2)(Lock free,轮询及线程池)

并发思想提炼(2)(Lock free,轮询及线程池)

发布时间:2016-03-24 10:00:10
8. 告别Lock不是一直说Lock比较麻烦危险吗,那就不要好了。其实有一个Lock free的方法。首先引入一个概念——原子变量。在这种变量上的操作是原子操作(atomic operation)。原子操作就是说这个操作要 ...

并发思想提炼(2)(Lock free,轮询及线程池)

8.    告别Lock

不是一直说Lock比较麻烦危险吗,那就不要好了。其实有一个Lock free的方法。

首先引入一个概念——原子变量。在这种变量上的操作是原子操作(atomic operation)。原子操作就是说这个操作要么都完成,要么都不完成,部分完成是不行的。就像物理化学中的原子一样,借用不可再分的意思。按照这样理解,对这个原子变量的访问操作就必定是串行的。一个原子操作完成后才能进行另一个原子操作。这样子的变量类型多半是基本变量,什么int啊double啊boolean啊之类。

就可以简单这样想,只要调用原子操作,就能保证对象的串行访问。

常用语言原子操作内部实现基本用到了锁。原子操作常用的有++,--,compare & swap。特别地,这个CAS(compare and swap)配合循环操作就能实现lock free方法。看下面的stack.push(…)伪代码。

1 Atomic<Node*> head;2 Node* new_node= new Node(….);3 New_node->next=head; (1)4 While(!head.compare_and_swap(new_node->next, new_node)); (2)

原标题:并发思想提炼(2)(Lock free,轮询及线程池)

关键词:线程

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。