рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдХрддрд╛рд░ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛

рдХрд╛рд░реНрдп



рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдПрдХ рдзрд╛рд░рд╛ рд╕реЗ рджреВрд╕рд░реА рдзрд╛рд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрдмрдХрд┐ рд╕рдВрдЪрд╛рд░рдг рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рджреЗрд░реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред рдбреЗрдЯрд╛ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдПрдХ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВред





рдореБрдЭреЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓реЗ - рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдирдиреНрдп рд╡рд╕реНрддреБрдУрдВ (MUTually рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБрдУрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рд▓реЙрдХ рдкреИрдЯрд░реНрди: рд░реАрдб-рд░рд╛рдЗрдЯ рд▓реЙрдХ рдкреИрдЯрд░реНрдиред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ рд╕рдорд╛рдзрд╛рди рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдереЗред MUTEX рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдПрдХ рдереНрд░реЗрдб MUTEX рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдереНрд░реЗрдб рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдЦрд╛рдореА рд╣реИ - рдпрджрд┐ рд░реАрдбрд┐рдВрдЧ рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рд▓реЙрдХ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдпрджрд┐ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ, рддреЛ рд░реАрдбрд┐рдВрдЧ рдереНрд░реЗрдб рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред



рдЪреВрдВрдХрд┐ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди рдлрд┐рдЯ рдирд╣реАрдВ рдереЗ, рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдХрд╛рд░реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереАрдВ:







рдирд┐рд░реНрдгрдп



рдирд┐рд░реНрдгрдп рдПрдХ рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдХрддрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдФрд░ рддрддреНрд╡ рд▓рдЧрд╛рддрд╛рд░ рдореМрдЬреВрдж рдерд╛, рдЕрд░реНрдерд╛рддреНред рдХрддрд╛рд░ рдХрднреА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реБрдИред рдорд╛рдирджрдВрдб рдХрд┐ рдХрддрд╛рд░ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИрдВ рддрдереНрдп рдпрд╣ рдерд╛ рдХрд┐ рдХрддрд╛рд░ рдХреЗ рд╕рд┐рд░ рдФрд░ рдкреВрдВрдЫ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╣реА рддрддреНрд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдмрд░рд╛рдмрд░ рдереЗ:



рдЦрд╛рд▓реА рдХрддрд╛рд░



рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╕реВрдЪрдХ рдХреЛ рдХрддрд╛рд░ рдХреА рдкреВрдВрдЫ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреВрдВрдЫ рдХреЗ рд╕реВрдЪрдХ рдХреЛ рдЕрдВрддрд┐рдо рдХреНрд╖рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдХрддрд╛рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрдШрд░реНрд╖ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рд▓реЗрдЦрди



рдкрдврд╝рддреЗ рд╕рдордп, рд╕реВрдЪрдХ рдХреЛ рдкрд╣рд▓реЗ рдХрддрд╛рд░ рдХреЗ рдкреНрд░рдореБрдЦ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдХрддрд╛рд░ рдХреЗ рдЦрд╛рд▓реА рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдХрддрд╛рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд░реАрдб рдбреЗрдЯрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ "рдкреИрдХреЗрдЬрд┐рдВрдЧ" рдмрдиреА рд░рд╣рддреА рд╣реИ, рдЬреЛ рдПрдХ рдирдпрд╛ рдЦрд╛рд▓реА рддрддреНрд╡ рдмрди рдЬрд╛рддрд╛ рд╣реИ:



рдЫрд╡рд┐



рдирддреАрдЬрддрди, рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рджреЛ рдзрд╛рд░рд╛рдПрдБ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдП рдмрд┐рдирд╛ рдкрдврд╝ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддреА рд╣реИрдВред рдХрддрд╛рд░ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрддреНрд╡ рдХреА рдирд┐рд░рдВрддрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди



рдХрддрд╛рд░ рддрддреНрд╡ рдХреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:



template <class E>

class QueueItem

{

public:

E* data;

QueueItem* next;



QueueItem(E* data);

};



template <class E>

QueueItem<E>::QueueItem(E* data)

{

this->data = data;

next = NULL;

}









рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рддреЗ рд╕рдордп, рдПрдХ рдЦрд╛рд▓реА рддрддреНрд╡ рддреБрд░рдВрдд рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



template <class T>

Queue<T>::Queue()

{

QueueItem<T>* stub = new QueueItem<T>(NULL);



head = stub;

tail = stub;

}









рд╢реВрдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдмрд╕ рдХрддрд╛рд░ рдХреЗ рд╕рд┐рд░ рдФрд░ рдкреВрдВрдЫ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдХреА рдЬрд╛рддреА рд╣реИ:



template <class T>

bool Queue<T>::empty()

{

return head == tail;

}









рдПрдХ рдирдпрд╛ рддрддреНрд╡ рд▓рд┐рдЦрддреЗ рд╕рдордп, рддрддреНрд╡ рдХреЛ рдкрд╣рд▓реЗ рд╕реВрдЪреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдХрддрд╛рд░ рдХреА рдкреВрдВрдЫ рдХреЛ рд╕реВрдЪрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



template <class T>

void Queue<T>::enqueue(T* value)

{

QueueItem<T>* item = new QueueItem<T>(value);



item->data = value;

item->next = NULL;



tail->next = item;



tail = item;

}








рдкрдврд╝рдирд╛ рдорд╛рдирдХ рд╣реИ:



template <class T>

T* Queue<T>::dequeue()

{

if (head == tail)

return NULL; // queue is empty



QueueItem<T>* tmp = head;

head = head->next;

delete tmp;



return head->data;

}









рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЙрдкрднреЛрдХреНрддрд╛ рдереНрд░реЗрдб рдХреЗ рдкрд╛рд╕ рд╣реИред



рдкрд░рд┐рдгрд╛рдо





рдпрд╣ рд╕рдорд╛рдзрд╛рди рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдХрд┐:




All Articles