Вопрос:Можно ли гарантировать, что выполнение кода может происходить только в одном потоке за раз в мульти -многопоточная программа? (Или что-то близкое к этому)
В частности:У меня есть контроллер M (, который представляет собой поток )и потоки A, B, C. Я хотел бы, чтобы M мог решить, кто должен быть разрешено бегать. Когда поток завершается (либо окончательно, либо временно ), управление переходит обратно к M.
Почему:В идеале я хочу, чтобы A, B и C выполняли свой код в своем собственном потоке, в то время как другие этого не делали. Бег. Это позволило бы каждому потоку сохранять свой указатель инструкций и стек во время паузы, начиная с того места, где они остановились, когда контроллер возвращает им управление.
Чем я сейчас занимаюсь:Я написал код, который действительно может это сделать -, но он мне не нравится.
В псевдо--C:
//Controller M
//do some stuff
UnlockMutex(mutex);
do{}while(lockval==0);
LockMutex(mutex);
//continue with other stuff
//Thread A
//The controller currently has the mutex - will release it at UnlockMutex
LockMutex(mutex);
lockval=1;
//do stuff
UnlockMutex(mutex);
Причина, по которой
do{}while(lockval==0);
требуется, заключается в том, что, когда мьютекс разблокирован, и A, и M будут продолжаться. Этот хак гарантирует, что A не разблокирует мьютекс до того, как M сможет снова заблокировать его, позволяя A повторно взять блокировку во второй раз и запустить снова (он должен запускаться только один раз ).
Команда do -хотя и кажется излишней, но работает. Итак, мой вопрос: есть ли лучший способ?