Последовательное выполнение кода в многопоточной -программе на C++

Вопрос:Можно ли гарантировать, что выполнение кода может происходить только в одном потоке за раз в мульти -многопоточная программа? (Или что-то близкое к этому)

В частности:У меня есть контроллер 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 -хотя и кажется излишней, но работает. Итак, мой вопрос: есть ли лучший способ?

5
задан EggplantBonanza 5 May 2012 в 13:37
поделиться