К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

7. Примитив синхронизации condition (условие)

Ниже приведен класс condition, определяющий одноименный примитив:

class Condition
{
bool event;
ThreadQueue tq; public: // очередь потоков
Condition(bool b): event(b) {} // конструктор
~Condition() {} // деструктор
void Signal() // сигнализировать о том, что условие выполнено
{
disable interrupt();
if(!tq.DequeueThread())
event = true; // запрещаем прерывания
enable interrupt(); // разрешаем прерывания
void Wait(Thread t) // ждать выполнения условия
{
disable interrupt(); // запрещаем прерывания
if(event)
event = false; // сбрасываем условие
else
tq.EnqueueThread(t) ; // ставим поток в очередь ожидания
enable interrupt(); // разрешаем прерывания
}
}
;

Этот примитив может использоваться для решения как задачи условной синхронизации, так и задачи взаимного исключения.

 

 


Предыдущая        В начало страницы       Следующая
7