I have a multi-threaded service in which I use thread suspend and resume to handle service pause and continue events. The service pause event suspends worker threads without releasing resources. For the stop event, a flag is set to request all worker threads to stop. Processing stops when a safe point is reached or after a timeout. I could do something similar for a pause (e.g., acquire a write lock to block threads that acquire-release read locks at specific locations), but suspend seems more like a pause. Also, suspend seems more reliable if you really need it to pause quickly and pause in all cases. Perhaps the current version of suspend should be replaced with a safer version (e.g., it suspends at the next safe location)?