epTime()): // Философ голоден

Автор admin Среда, 1 июля 2009 11:32

epTime()): // Философ голоден output(“grabbing right”): right.takeO: output(“grabbing left”); left.takeO: output(“eating”): ZThread::Thread::sleep(randSleepTime()): right.drop(); left.dropO: } } catch(ZThread::Synchronization_Exception& e) { output(e.whatO); } } friend std::ostream& operator«(std: :o stream& os. const Philosophers p) { return os « “Philosopher ” « p.id; } }: #endif // DININGPHIL0S0PHERS_H ///:- Два философа (объекты Philosopher) не могут взять (take()) палочку (объект Chopstick) одновременно, поскольку функция take() синхронизируется при помощи мутекса. Кроме того, если палочка уже находится у кого-то другого, философ ожидает ее освобождения вызовом функции drop() (причем этот вызов тоже должен синхронизироваться для предотвращения ситуации гонок и обеспечения видимости изменений в многопроцессорных системах). Взаимная блокировка 589 Каждый объект Philosopher содержит ссылки на два объекта Chopstick (левая и правая палочки). Через эти ссылки он пытается взять палочки. Объект Philosopher одну часть времени думает, а другую — ест, и это обстоятельство отражено в функции main(). Нетрудно


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