【发布时间】:2015-12-21 09:43:57
【问题描述】:
我一直在尝试使用 Alex Kogan 和 Erez Petrank 从 here 获取的已编写的免等待队列,但遇到了问题。我无法理解在第 5 页和第 7 页的 que() 和 deque() 方法中需要使用确切的线程 ID:
void enq(int value) {
long phase = maxPhase() + 1; // cf. Figure 3b
state.set(TID, new
OpDesc(phase, true, true, new Node(value, TID)));
help(phase);
help finish enq();
}
还有
int deq() throws EmptyException {
long phase = maxPhase() + 1; // cf. Figure 5a
state.set(TID, new OpDesc(phase, true, false, null));
help(phase);
help finish deq();
Node node = state.get(TID).node;
if (node == null) {
throw new EmptyException();
}
return node.next.get().value;
}
应该使用什么线程ID?
【问题讨论】:
-
“ID”代表唯一标识符。线程 ID 的基本要求是每个线程都必须有一个,并且每个线程的 ID 必须与其他每个线程的 ID 不同,并且一个线程的 ID 永远不能改变。对于任何 Java 线程
t,t.getId()返回的数字将满足这些要求。
标签: java multithreading queue theory wait-free