portal Michała Hanćkowiaka
Begin main content
/* prod i kons, dwa lacza jednokierunkowe, 01.2018
wezel 1: wysyla 7, czyta 6,
wezel 2: czyta 7, wysyla 6,
bufor ma 5 elem,
na poczatku: w.1 ma 23 elem, w.2 ma 0 elem
!!! UWAGA: w tym przykladzie wysyla sie i czyta po 1 elem !!!
spin potrafi sobie poradzic z nieskon. egz. ?!?!

zdaje sie ze zamiast buf. cykl. elem1/2 mozna uzyc kanalu ?!?!?!

*/

chan lacze1= [5] of {byte};
chan lacze2= [5] of {byte};

byte elem1[25]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0,0};
byte c1=0, p1=23, pelne1=23, wolne1=2;

byte elem2[25];
byte c2=0, p2=0, pelne2=0, wolne2=25;

active proctype P1() {
  byte e;
  do
  :: pelne1>0 -> e=elem1[c1]; c1=(c1+1)%25; pelne1--; wolne1++; lacze1!e;
    wolne1>0 -> lacze2?e; elem1[p1]=e; p1=(p1+1)%25; pelne1++; wolne1--;
    //printf("c1=%d p1=%d c2=%d p2=%d\n", c1, p1, c2, p2);
  od;
}

active proctype P2() {
  byte e;
  do
  :: wolne2>0 -> lacze1?e; elem2[p2]=e; p2=(p2+1)%25; pelne2++; wolne2--;
    pelne2>0 -> e=elem2[c2]; c2=(c2+1)%25; pelne2--; wolne2++; lacze2!e;
    //printf("c1=%d p1=%d c2=%d p2=%d\n", c1, p1, c2, p2);
  od;
}

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...