рдХрд╛рд░реНрдп
рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдПрдХ рдзрд╛рд░рд╛ рд╕реЗ рджреВрд╕рд░реА рдзрд╛рд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрдмрдХрд┐ рд╕рдВрдЪрд╛рд░рдг рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рджреЗрд░реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред рдбреЗрдЯрд╛ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдПрдХ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВред
рдореБрдЭреЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓реЗ - рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдирдиреНрдп рд╡рд╕реНрддреБрдУрдВ (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;
}
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЙрдкрднреЛрдХреНрддрд╛ рдереНрд░реЗрдб рдХреЗ рдкрд╛рд╕ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдХрд┐:
- рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рд░ рдореЗрдВ рдПрдХ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
- рдХрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рджреЗрд░реА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдВрдкреНрдпреВрдЯрд░ рдЧреЗрдо рдпрд╛ рдЕрдиреНрдп рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ) рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
- рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╣реИред рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдХрдИ рд╕рдВрдЪрд╛рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рд╛рдкреНрдд рдзрд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЪрд╛рд░рдг рдзрд╛рд░рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рдмрдирд╛рдПрдЧреАред