gpt4 book ai didi

java - 坚持写入 JCSP channel

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:58 24 4
gpt4 key购买 nike

我有这个非常简单的 JCSP(Java 通信顺序进程)代码示例,我在其中尝试将整数写入 One2OneInt channel ,然后读取它。

package jcsp;
import org.jcsp.lang.*;

public class JCSP {

public static void main(String[] args) {

One2OneChannelInt chan = Channel.one2oneInt();
chan.out().write(5);

System.out.println("Written...");

System.out.println(chan.in().read());
}
}

似乎值永远不会写入 channel ,程序只会继续运行。 “书面...” 永远不会打印出来。

最佳答案

于是我了解了BlockingQueue及其实现SynchronousQueue。如前所述 here , SynchronousQueue 的工作方式与 CSP Channels 的工作方式类似。这帮助我意识到我的代码出了什么问题。简而言之,您不能在同一进程中从 channel 写入读取Channel进程进行通信的方式。

类似于 SynchronousQueue 的 put() 将等待其他进程调用 take()CSP Channel 的 write() 将等待相应的 read() 被调用。不同之处在于 CSP Channels 具有对象 ChannelOutputChannelInput,通过它们写入对象并显示为红色。相反,您可以直接在 SynchronousQueue 实例上调用 puttake。就个人而言,我觉得SynchronousQueue 更容易理解,这可能与JCSP 不是很流行有关。

不过,如果您对我如何使上述代码在 JCSP 中工作感兴趣,请看这里:

public static class Process1 implements CSProcess {

private ChannelOutputInt output;

public Process1(ChannelOutputInt out) {
output = out;
}

@Override
public void run() {
for (int i = 0; i < 1; i++) {
System.out.println("Written...");
output.write(5);
}
output.write(-1);
}

}

public static class Process2 implements CSProcess {

private ChannelInputInt input;

public Process2(ChannelInputInt in) {
input = in;
}

@Override
public void run() {
int x = 0;
while ((x = input.read()) > 0) {
System.out.println(x);
}
}

}

public static void main(String[] args) {

One2OneChannelInt chan = Channel.one2oneInt();

Process1 process1 = new Process1(chan.out());
Process2 process2 = new Process2(chan.in());

Parallel parallel = new Parallel();

parallel.addProcess(process1);
parallel.addProcess(process2);
parallel.run();
}

关于java - 坚持写入 JCSP channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33500139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com