What is the Mutex and semaphore in C#? Where we need to implement? How can we work with them in multithreading?