#define NUM 100 I64 mp_not_done_flags,grand_total; U0 MPRoutine(CDoc *doc) { I64 i,sum=0, lo=NUM*Gs->num/mp_cnt, //This is how to divide a job hi=NUM*(Gs->num+1)/mp_cnt; for (i=lo;i<hi;i++) sum+=i; DocPrint(doc,"Core#%d:%d-%d:%d\n",Gs->num,lo,hi-1,sum); lock {grand_total+=sum;} LBtr(&mp_not_done_flags,Gs->num); } U0 Main() { I64 i; grand_total=0; mp_not_done_flags=1<<mp_cnt-1; for (i=0;i<mp_cnt;i++) Spawn(&MPRoutine,DocPut,NULL,i); while (mp_not_done_flags) Yield; "Grand total:%d\n",grand_total; } Main;