Your producers do the following:
P-A: Clear the event
P-B: Set the event
Your consumers do the following:
C-A: Wait for the event to become set
C-B: Wake up when event is set
C-C: Get the event value to return it
C-D: Clear the event
You enforce no ordering between your producer and your consumers or between your consumers and each other, so this can happen:
P-A (event is clear)
C1-A
C2-A
C3-A (all three consumers are waiting)
P-B (event is set)
C1-B
C2-B
C3-B (all consumers have woken up because the event is set)
C1-C (consumer 1 sees the event as set)
C1-D (consumer 1 has cleared the event)
C2-C (consumer 2 sees event as clear)
C3-C (consumer 3 sees event as clear)
C2-D
C3-D
...