interrupt() может произойти ра

Автор admin Пятница, 26 июня 2009 11:32

interrupt() может произойти раньше вызова blocked.fO (хотя это и маловероятно). void f() { Guard g(lock); // Никогда не будет доступен } }: class Blocked2 : public Runnable { BlockedMutex blocked: public: void run() { try { cout « “Waiting for f() in BlockedMutex” « endl; blocked.fO: } catch(Interrupted_Exception& e) { cerr « e.whatO « endl; // Завершение задачи } } }: int main(int argc. char* argv[]) { try { Thread t(new Blocked2): t. inter ruptO; } catch(Synchronization_Exception& e) { cerr « e.what() « endl; } } ///:- Класс BlockedMutex содержит конструктор, который захватывает мутекс объекта и не освобождает его. Из-за этого попытка вызова f() всегда блокируется, поскольку захватить мутекс никогда не удастся. В Blocked2 функция run() будет остановлена при вызове blocked.f(). Если запустить программу, вы увидите, что, в отличие от предыдущего примера, interrupt() позволяет прервать вызов, заблокированный по ожиданию мутекса1. Проверка прерывания При вызове interrupt) для программного потока прерывание происходит либо если задача входит в блокирующую операцию, либо если она уже заблокирована (к


Комментарии закрыты.