Even though multithreading makes processes run asynchronously, there will be times where threads must be stopped and wait for other threads. This usually happens when both threads are modifying the same variable simultaneously. It is common to force threads to wait for one another to protect shared resources, such as data. Qt 5 also provides both low-level methods and high-level mechanisms to synchronize threads.