Stuck schreibt auf JCSP-Kanal

8

Ich habe also dieses wirklich einfache JCSP (Java Communicating Sequential Processes) Codebeispiel, in dem ich versuche, eine ganze Zahl in einen One2OneInt Kanal zu schreiben und sie dann zu lesen .

%Vor%

Es scheint, dass der Wert niemals auf den Kanal geschrieben wird und das Programm läuft einfach weiter. "Geschrieben ..." wird niemals ausgedruckt.

    
Schizo 03.11.2015, 13:16
quelle

2 Antworten

6

Also habe ich von BlockingQueue und seiner Implementierung SynchronousQueue erfahren. Wie bereits erwähnt hier funktioniert SynchronousQueue in ähnlicher Weise welche CSP Channels arbeiten. Dies half mir zu erkennen, was mit meinem Code nicht stimmte. Einfach gesagt, Sie können nicht write und read von Kanal in demselben Prozess. Channel ist eine Möglichkeit für Prozesse zu kommunizieren.

Ähnlich wie SynchronousQueue's put() , das darauf wartet, dass ein anderer Prozess take() aufruft, CSP Channel's write() , der darauf wartet, dass die entsprechende read() aufgerufen wird. Der Unterschied besteht darin, dass CSP Channels über die Objekte ChannelOutput und ChannelInput verfügt, über die Objekte geschrieben und rot geschrieben werden. Umgekehrt können Sie put und take direkt auf der Instanz von SynchronousQueue aufrufen. Persönlich finde ich SynchronousQueue viel einfacher zu verstehen, was wahrscheinlich darauf zurückzuführen ist, dass JCSP nicht sehr beliebt ist.

Wenn Sie interessiert sind, wie ich den obigen Code in JCSP implementiert habe, hier ist es:

%Vor%     
Schizo 18.11.2015, 13:06
quelle
0

Das Problem besteht darin, dass der Kanal nicht gepuffert ist. Ihr write() -Aufruf blockiert also, bis ein anderer Prozess den Kanal liest. Sobald ein anderer Prozess read() aufruft, wird 'Geschrieben ...' ausgedruckt.

A BlockingQueue mit einer Kapazität von 0 verhält sich ähnlich wie ein JCSP-Kanal

    
andyd 14.01.2016 14:16
quelle

Tags und Links