Mercurial > hg > Database > Alice
diff src/alice/codesegment/InputDataSegment.java @ 19:e7867328a2fb
change execute() API
author | kazz <kazz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 15 Jan 2012 17:57:05 +0900 |
parents | 72dd27d952b0 |
children | 98ab26e09a98 |
line wrap: on
line diff
--- a/src/alice/codesegment/InputDataSegment.java Sun Jan 15 16:03:11 2012 +0900 +++ b/src/alice/codesegment/InputDataSegment.java Sun Jan 15 17:57:05 2012 +0900 @@ -9,7 +9,8 @@ public class InputDataSegment { private CodeSegment cs; - private AtomicInteger count = new AtomicInteger(1); // for execute() + private AtomicInteger count = new AtomicInteger(1); // for no input data segments + private AtomicInteger keyCount = new AtomicInteger(0); public InputDataSegment(CodeSegment cs) { this.cs = cs; @@ -21,7 +22,6 @@ public void peek(DataSegmentReceiver receiver, String managerKey, String key, int index) { DataSegment.get(managerKey).peek(receiver, key, index, cs); - count.getAndIncrement(); } public void take(DataSegmentReceiver receiver, String managerKey, String key) { @@ -30,16 +30,26 @@ public void take(DataSegmentReceiver receiver, String managerKey, String key, int index) { DataSegment.get(managerKey).take(receiver, key, index, cs); - count.getAndIncrement(); } public void reply(DataSegmentReceiver receiver, DataSegmentValue val) { receiver.index = val.index; receiver.val = val.val; - execute(); + receive(); + } + + public void regist() { + count.getAndIncrement(); + keyCount.getAndIncrement(); } - public void execute() { + public void setKey() { + if (keyCount.decrementAndGet() == 0) { + receive(); + } + } + + public void receive() { if (count.decrementAndGet() == 0) { try { CodeSegmentManager.get().readyQueue.put(cs);