using namespace ZThread: using

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

using namespace ZThread: using namespace std: class Count { enum { SZ = 100 }: 548 Глава И • Многопоточное программирование int n[SZ]: public: void increment О { for(int i = 0; i < SZ: i++) n[i]++: } }: class Incrementer : public Runnable { Count* count: public: Incrementer(Count* c) : count(c) {} void runО { fordnt n = 100: n > 0: n–) { Thread::sleep(250): count->increment(): } } }: int mainO { cout « “This will cause a segmentation fault!” « endl: Count count: try { Thread t0(new Incrementer(&count)): Thread tKnew Incrementer(&count)); } catch(Synchronization_Exception& e) { cerr « e.whatO « endl: } } ///:- Класс Count на первый взгляд кажется лишним, но если использовать вместо массива простую переменную int, то компилятор может разместить ее в регистре, и эта память останется доступной после выхода объекта Count из области видимости (пусть это и незаконно с технической точки зрения). Это затруднило бы обнаружение недействительных обращений к памяти. Конкретный результат зависит от компилятора и операционной системы; попробуйте заменить п простой переменной типа int и посмотрите, что произойдет. В


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