快捷搜索:  xxx  as  推理研究所  幼幼  侦探研究所

手机最新版恒峰娱乐app:关于多线程同步的初步教程--Simaphore的设计及使用



在前面的“关于多线程同步的初步手机最新版恒峰娱乐app教程--Metux的设计及应用”一手机最新版恒峰娱乐app文中,我们评论争论了Doug Lea的concurrent包的Mutux的设计及实现,本文评论争论一下多线程编程中同样常用的Simaphore的设计和应用。Simaphore也承袭于Sync接口,和Mutex比拟,Simaphore增添了同步的计数支持。一个Simaphore,代表了多个许可,可以一次获取多个许可,也可以一次开释多个许可。假如将Simaphore的许可数削减到1,那么就可以作为一个Mutex应用了。下面的代码演示了Simaphore的基础应用:

class Pool {

static final MAX_AVAILABLE = 100; // 100个许可

private 手机最新版恒峰娱乐appf手机最新版恒峰娱乐appinal Semaphore available = new Semaphore(MAX_AVAILABLE);

public Object getItem() throws InterruptedException { // no synch

available.acquire();

return getNextAvailableItem();

}

public void putItem(Object x) { // no synch

if (markAsUnused(x))

available.release();

}

// Not a particularly efficient data structure; just for demo

protected Object[] items = ... whatever kinds of items being managed

protected boolean[] used = new boolean[MAX_AVAILABLE];

protected synchronized Object getNextAvailableItem() {

for (int i = 0; i

if (!used[i]) {

used[i] = true;

return items[i];

}

}

return null; // not reached

}

protected synchronized boolean markAsUnused(Object item) {

for (int i = 0; i

if (item == items[i]) {

if (used[i]) {

used[i] = false;

return true;

}

else

return false;

}

}

return false手机最新版恒峰娱乐app;

}

}

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: