In your case, I myself would use the event. An event signal when you want the thread to start working. The task:)
Edit: the difference between semaphores and events comes down to an internal account. If there are multiple ReleaseSemaphores, then 2 WaitForSingleObjects will be released. Events are Boolean in nature. If a Signal event occurs in two different places at the same time, then the wait will be canceled and it will be returned to unsignalled (depending on whether you have an automatic or manual reset). If you need it to be signaled from several places at the same time, and to be executed twice for the waiting thread, this behavior of this event could lead to a deadlock.
source share