#include #include #include #include #include #include #include size_t total_operations = 0; // typedef channel_base( int, exp_backoff_then_block_lock ) Channel; typedef channel( int ) Channel; Channel * ping; Channel * pong; bool done = false; thread Pong {}; void main(Pong & this) { for ( ;; ) { if ( done ) break; insert( *ping, 0 ); remove( *pong ); } } thread Ping {}; void main(Ping & this) { size_t runs = 0; for ( ;; ) { if ( done ) break; remove( *ping ); insert( *pong, 1 ); total_operations++; } } int main( int argc, char * argv[] ) { processor proc[1]; Channel pingChan{ 2 }; Channel pongChan{ 2 }; ping = &pingChan; pong = &pongChan; { Ping pi; Pong po; sleep(10`s); done = true; insert( *pong, 2 ); insert( *ping, 2 ); } sout | total_operations; // sout | "done"; return 0; }