, : : enterA(), leaveA(), enterB(), leaveB(); , var aCount bCount.
enterA:
lock mutex
wait on condition var until bCount is zero
increment aCount
unlock mutex
leaveA:
lock mutex
decrement aCount
notify condition var if aCount==0
unlock mutex
enterB() leaveB() , inc/dec bCount aCount == 0.