我正在阅读,现在我在关于非阻塞保证的部分。以下是(强调我的)话:
如果每个调用都保证在有限的步骤中完成,则方法是无等待的。
..。
由于每个参与者都可以在有限的步骤之后(当调用结束时)取得进展,所以没有等待的方法没有饥饿的。
强调的内容在我看来并不十分清楚。饥饿在文档的前面被定义为参与者不可能取得进展(有些人被饿死了)。
现在,如果多个线程调用相同的无等待方法,它们就不能挨饿。这是否意味着,即使该方法是阻塞和无等待,存储永远不会发生?我只是想不出关于免等待方法的具体细节?
例如,如果一个方法调用阻塞I/O方法,那么它是否没有等待?我会说不,不是的。但是这个呢:
public class
当我记录下面的两个线程I时,它们是不同的。
long threadId = Thread.currentThread().getId();
long threadId2 = android.os.Process.myTid();
但在Android文档中,它们是完全相同的:
/**
* Returns the Thread of the caller, that is, the current Thread.
*/
public static native Thread currentThread();
所以我假设第一行将返回调用者线程的id。
然后是这个
/**
* Returns
如果使用邻接矩阵表示,Prim算法的时间复杂度为O(|V|^2)。
我试图用邻接矩阵实现Prim的算法。我正在使用作为参考。
V = {1,2...,n}
U = {1}
T = NULL
while V != U:
/*
Now this implementation means that
I find lowest cost edge in O(n).
How do I do that using adjacency list?
*/
let (u, v) be the lowest cost e
Dijkstra(G,w,s) {
ISS(G,s);
let S be an empty set
let Q be a priority queue, initialized with V[G]
while Q is not Empty:
u<-extractMin(Q);
add u to S
for each vertex v neighbor of u
Relax(u,v,w);
}
我的问题是,为什么在while循环中的算法的每一步中,选择q中所有v的最小dv很重要,如果我们不选择最小dv,会有