首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

Concurrent Synchronizer Framework(三)

2012-12-23 
Concurrent Synchronizer Framework(3)?if (!tryAcquire(arg)) {node create and enqueue new nodepred

Concurrent Synchronizer Framework(3)

?

if (!tryAcquire(arg)) {node = create and enqueue new node;pred = node's effective predecessor;while (pred is not head node || !tryAcquire(arg)) {if (pred's signal bit is set)park();elsecompareAndSet pred's signal bit to true;pred = node's effective predecessor;}head = node;}?

if (tryRelease(arg) && head node's signal bit is set) {compareAndSet head's signal bit to false;unpark head's successor, if one exists}?

为了支持cancel,在acquire循环中,需要检查超时和中断。一个由超时或中断引起的被取消的线程需要设置它的状态和unpark它的后继,所以它可能重置指针。随着cancel,决定前驱后继和重置状态,可能会包含O(n)的遍历(n是Queue的长度)。因为一个已经被cancle的线程永远不可能再次阻塞,链接和状态需要被迅速的重建。

热点排行