Latency is worse than using mwait because you are sleeping unconditionally.
Mwait does not prevent you from getting the interrupt to schedule.


By this I mean that mwait unblocks on interrupt.  You could do something like
(you do exponential backoff calling sleep or sleep/wakeup in the kernel) one out of N where N
goes from big to 1 as the count increases:

while(1){
      mwait(&l->mwaitvar);
      test_the_var_and break();
      sleep(0); //one out of N iterations
}

This will make the the process consume a little part of the quantum (until the next tick)  waiting, and most
of that time the processor is turned off or at least consuming less.

G.