Ответ 1
Вы используете мьютекс, чтобы обеспечить доступ только к одному потоку выполнения. Например, если вы хотите обновить список, который потенциально может использоваться несколькими потоками, вы должны использовать мьютекс:
acquire mutex
update list
release mutex
При использовании мьютекса только один поток за раз может выполнять "список обновлений".
Вы используете ручное событие reset, если хотите, чтобы несколько потоков ожидали, что что-то произойдет, прежде чем продолжить. Например, вы начали несколько потоков, но все они приостановлены, ожидая какого-то другого события, прежде чем они смогут продолжить. Как только это событие произойдет, все потоки могут начать работать.
Основной поток будет выглядеть следующим образом:
create event, initial value false (not signaled)
start threads
do some other initialization
signal event
Каждый код потока:
do thread initialization
wait for event to be signaled
do thread processing