為什麼要在acquire()和attempt(
release()方法簡單地重置inuse_標志
attempt()方法是利用Java的Object
Mutex是Sync的一個基本實現
class Node
{
Object item; Node next;
Mutex lock = new Mutex();
// 每一個節點都持有一個鎖
Node(Object x
{
item = x;
next = n;
}
}
class List
{
protected Node head;
// 指向列表的頭
// 使用Java的synchronized保護head域
// (我們當然可以使用Mutex
protected synchronized Node getHead()
{ return head; }
boolean search(Object x) throws InterruptedException
{
Node p = getHead();
if (p == null) return false;
// (這兒可以更加緊湊
p
// Prime loop by acquiring first lock
// (If the acquire fails due to
// interrupt
// InterruptedException now
// so there is no need for any
// further cleanup
for (;;)
{
if (x
{
p
// 釋放當前節點的鎖
return true;
}
else
{
Node nextp = p
if (nextp == null)
{
p
// 釋放最後持有的鎖
return false;
}
else
{
try
{
nextp
// 在釋放當前鎖之前獲取下一個節點的鎖
}
catch (InterruptedException ex)
{
p
// 如果獲取失敗
}
p
// 釋放上個節點的鎖
p = nextp;
}
}
}
}
synchronized void add(Object x)
{
// 使用synchronized保護head域
head = new Node(x
}
//
}
[
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27681.html