import Ġarrow . fx . coroutines . Atomic Ċ import Ġarrow . fx . coroutines . par Zip Ċ import Ġkotlin . time . Duration . Companion . seconds Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġkotlinx . coroutines . delay Ċ import Ġpre def . debug Ċ Ċ suspend Ġfun Ġmut a ul Ex clusion () Ġ{ ĊĠ Ġsuspend Ġfun Ġthread ( count : ĠAtomic < Int >): ĠUnit Ġ= ĊĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ Ġcount . update ( Int :: inc ) Ġ} ĊĊĠ Ġval Ġcount Ġ= ĠAtomic ( 0 ) ĊĠ Ġpar Zip ({ Ġthread ( count ) Ġ}, Ġ{ Ġthread ( count ) Ġ}) Ġ{ Ġ_, _ Ġ-> Ġ} ĊĠ Ġval Ġresult Ġ= Ġcount . get () ĊĠ Ġprintln ( result ) Ċ } Ċ Ċ suspend Ġfun Ġnon Determin ism () Ġ{ ĊĠ Ġsuspend Ġfun Ġyes (): ĠString Ġ= Ġ" yes ". debug () ĊĠ Ġsuspend Ġfun Ġno (): ĠString Ġ= Ġ" no ". debug () ĊĠ Ġpar Zip ({ Ġyes () Ġ}, Ġ{ Ġno () Ġ}) Ġ{ Ġ_, _ Ġ-> Ġ} Ċ } Ċ Ċ suspend Ġfun Ġserialization With Messages () Ġ{ ĊĠ Ġsuspend Ġfun Ġalice ( call : ĠComp letable Deferred < Unit >) Ġ{ ĊĠĠĠ Ġdelay ( 1 . seconds ) ĊĠĠĠĠĠ Ġ" Alice Ġe ats Ġbreak fast ". debug () ĊĠĠĠĠĠ Ġ" Work ". debug () ĊĠĠĠĠĠ Ġ" Alice Ġe ats Ġl unch ". debug () ĊĠĠĠĠĠ Ġcall . complete ( Unit ) ĊĠ Ġ} ĊĊĠ Ġsuspend Ġfun Ġbob ( call : ĠDeferred < Unit >) Ġ{ ĊĠĠĠ Ġ" Bob Ġe ats Ġbreak fast ". debug () ĊĠĠĠ Ġcall . await () ĊĠĠĠ Ġ" Bob Ġe ats Ġl unch ". debug () ĊĠ Ġ} ĊĊĠ Ġval Ġcall Ġ= ĠComp letable Deferred < Unit >() ĊĠ Ġpar Zip ({ Ġalice ( call ) Ġ}, Ġ{ Ġbob ( call ) Ġ}) Ġ{ Ġ_, _ Ġ-> Ġ} Ċ } Ċ