Recall that condition variables are synchronization primitives that enable threads to wait until a particular condition occurs.
Generalizing, the combination of locks and condition variables is sometimes called a monitor, which is sometimes incorporated into data structures in some languages (note that this termi- nology is not always used in a standardized way).
Previously,we discussed howto use condition variables and signals to implement a simple producer- consumer system. Looking at this system again, could we move the signal() call in enqueue() down below the unlock()?
dequeue()lock(A)while (queue empty)wait(A, C)remove_item()unlock(A)enqueue()lock(A)insert_item()// used to signal here, inside lockunlock(A)signal(C) // now signal here, outside lock
Will this work? The answer is yes. It might not be as clean conceptually, but nothing bad will happen (verify this for yourself).