Could you please explain mutex, semaphore and condition variable with the help of example code. With the help theoretical example I understand what all these objects are for, so could you please make example in terms of common example of code being used in any project.