#define NUM             100

I64 mp_not_done_flags, grand_total;

U0 MPRoutine(CDoc *doc)
{
        I64 i, sum = 0, 
                lo = NUM * Gs->num / mp_count,          //This is how to divide a job
                hi = NUM * (Gs->num + 1) / mp_count;

        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_count - 1;
        for (i = 0; i < mp_count; i++)
                Spawn(&MPRoutine, DocPut, NULL, i);
        while (mp_not_done_flags)
                Yield;
        "Grand total:%d\n", grand_total;
}

Main;