public void InitJoin() {
var join = (MainWindow.SCALABLE) ?
Join.Create<Join.Scalable>(4 + NumBoids + NumBoids)
: Join.Create<Join.LockBased>(4 + NumBoids + NumBoids);
join.Initialize(out Boids, NumBoids);
join.Initialize(out Tick);
join.Initialize(out Running);
join.Initialize(out NotRunning);
join.Initialize(out PauseResume);
join.Initialize(out Sync, NumBoids);
for (int i = 0; i < NumBoids; i++)
{ // dummy channels to add contention
join.When(Sync[i]).Do(() => { ;});
}
// rendezvous pattern
join.When(Tick).And(Running).And(Boids).Do(data => { Running(); return data; });
join.When(PauseResume).And(Running).Do(() => NotRunning());
join.When(PauseResume).And(NotRunning).Do(() => { ResetStats(); Running(); });
Running();
var d = new Data[NumBoids];
}