Skip to content
  • Paolo Bonzini's avatar
    qemu-thread: add QemuEvent · c7c4d063
    Paolo Bonzini authored
    
    
    This emulates Win32 manual-reset events using futexes or conditional
    variables.  Typical ways to use them are with multi-producer,
    single-consumer data structures, to test for a complex condition whose
    elements come from different threads:
    
        for (;;) {
            qemu_event_reset(ev);
            ... test complex condition ...
            if (condition is true) {
                break;
            }
            qemu_event_wait(ev);
        }
    
    Or more efficiently (but with some duplication):
    
        ... evaluate condition ...
        while (!condition) {
            qemu_event_reset(ev);
            ... evaluate condition ...
            if (!condition) {
                qemu_event_wait(ev);
                ... evaluate condition ...
            }
        }
    
    QemuEvent provides a very fast userspace path in the common case when
    no other thread is waiting, or the event is not changing state.
    
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    c7c4d063