рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдиреЗ рд╣рдорд╛рд░реЗ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЙрддреНрдкрд╛рдж рдХреЗ рдкреАрдПрд▓рдПрдо рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ред рд╣рдорд╛рд░реЗ рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рд╣реИ
, рдШрдбрд╝реА рдХреБрддреНрддреЗ, рдЖрджрд┐ред рдХрд╛рд░реНрдп рдореЗрдВ рдХреБрдЫ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рдХрд╛рд░реНрдп рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреИрд╕реЗ рдХреБрдЫ рд▓реЙрдЧ, рдЙрдиреНрдирдд рдирд┐рджрд╛рдиред рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореВрд▓ рдХрд╛рд░реНрдп рдХрд╛ рдХреЛрдИ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдПрдХ рд╕реНрд░реЛрдд (рдирд┐рд░реНрдорд╛рддрд╛) рдФрд░ рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореНрдпреВрдЯреЗрдХреНрд╕ рдпрд╛ рд╕реЗрдорд╛рдлреЛрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореВрд▓ рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧреА, рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреНрдпрд╛рдЧрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░, рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдХрд╛рд░реНрдп рдХреЛ рдХрдИ рдЕрдиреНрдп рдлреЗрд░рдмрджрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЬрдм рдПрдХ рдХрд╛рд░реНрдп рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реАрдорд┐рдд рд╣реИ (рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдкрдиреЗ рд╕реВрдЪрдирд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдорд╛рдлреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рдмрд╣реБрдд рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рдкрд░рд┐рдкрддреНрд░ рдмрдлрд░ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдпрд╛ рдЙрдкрднреЛрдХреНрддрд╛ рдЗрд╕рдХрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ, рд╕реНрд░реЛрдд рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдЙрд╕ рд╕реЗрд▓ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдмрд┐рдЯ рд╢реВрдиреНрдп рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ "рдкреНрд░рдХрд╛рд╢рд┐рдд" рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдмрд┐рдЯ рдХреЛ рдПрдХ рдпреВрдирд┐рдЯ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдЙрдкрднреЛрдХреНрддрд╛, рдЬрд┐рд╕рдХрд╛ рддрддреНрд╡ рдпрд╣ рдмрд┐рдЯ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рд╕рдВрджреЗрд╢ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд┐рдЯ рд╢реВрдиреНрдп рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдкрд╣рд▓реЗ рдпрд╛рддрд╛рдпрд╛рдд рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдПрдХ рд╕реНрд░реЛрдд рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рд▓рдЧрднрдЧ 30-40 рд╣рдЬрд╛рд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдХрдо рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдЕрднреА рднреА рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд▓реЗрдХрд┐рди рдмрдлрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрд╕реНрдерд┐рд░ рдЧрддрд┐ рднреА рд╣реИ - рдХреБрдЫ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдПрдл рдХрд╛рд░реНрдб рд╣реИрдВред рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджреЗрд╢ рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░
рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд░ рдЖрдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛:
drdobbs.com/altecture-and-design/210604448рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ред
рджреЛ рдмрджрд▓рд╛рд╡ рдореИрдВрдиреЗ рдХрд┐рдП:
1) рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рд╕реНрд░реЛрдд рддрддреНрд╡реЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛ рдирд╣реАрдВред рдЙрдкрднреЛрдХреНрддрд╛ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡реЛрдВ рдХреА рд░рд┐рд╣рд╛рдИ рднреА рдПрдХ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИ (рд╡реИрд╕реЗ, рдореИрдВ рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?)ред рдпрд╣ рдЙрдкрднреЛрдХреНрддрд╛ рд╕реЗ рд▓реЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдХрд╛рд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рднрд╕реНрдо рддрддреНрд╡ рддреБрд░рдВрдд рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
2) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╛рддрд╛рдпрд╛рдд рдкрд░реАрдХреНрд╖рдг, рдпрд╛ рдмрд▓реНрдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдиреЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореЙрд▓реЛрдХ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдЪреВрдБрдХрд┐ рд╕реНрд░реЛрдд рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдЬреНрдЮрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХреЛ рддреБрд░рдВрдд 8 рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд╕реЗ рдЧрддрд┐ рдореЗрдВ рджреЛрдЧреБрдиреА рд╕реЗ рдЕрдзрд┐рдХ рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХреЛ рдЖрдзрд╛ рдХрд░рдХреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдореВрд▓ рдХрд╛рд░реНрдп рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рддрддреНрдХрд╛рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреИрд░-рдкреНрд▓рд╕ рдПрд╕ рдореЗрдВ рдерд╛, рдЬреЛ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреИрд░-рдкреНрд░рдХрдЯреАрдХрд░рдг рд╕рдордЭреМрддреЗ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдорд▓реЙрдХ рдЕрдм рд╕реА-рд╢рд╛рд░реНрдк рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рдЕрдм рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд╕-рд╢рд╛рд░реНрдк рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдиреМрдХрд░реА рдХреА рдкреЗрд╢рдХрд╢ рдХреА, рдореИрдВ рдЗрд╕ рдЬрд╛рджреБрдИ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдХреА рдХрдореА рд╕реЗ рдирд╣реАрдВ рдЧреБрдЬрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рддрдм рд╕реЗ рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдУрд╣ рдареАрдХ рд╣реИ, рдмрд┐рдВрджреБ рдХреЗ рдХрд░реАрдмред
C # рдореЗрдВ рдПрдХ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреНрдпреВ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рдкрд╣рд▓рд╛ рдХрджрдо рдХрддрд╛рд░ рдХреЗ рддрддреНрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИред
рдХрдХреНрд╖рд╛ рдХ
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ queItem рдЕрдЧрд▓рд╛;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ queItem (рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢ = рдЕрд╢рдХреНрдд)
{
this.message = message;
рдЕрдЧрд▓рд╛ = рдЕрд╢рдХреНрдд;
}
}
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрдж рдХреА рдмрд╛рд░реА:
рдХреНрд▓рд╛рд╕ рд▓реЙрдХрд▓реЗрд╕ рдХреНрдпреВ / рдереНрд░реЗрдб-рдЯреВ-рдереНрд░реЗрдб рд▓реЙрдХрд▓реЗрд╕ рдХреНрдпреВ
{
рдкрд╣рд▓реЗ рдпрд╣;
queItem рдЕрдВрддрд┐рдо;
}
рдпрд╣рд╛рдВ, рдкрд╣рд▓реЗ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдореЗрдВ рдЕрдЧрд▓рд╛ рд╕реНрд░реЛрдд рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИред рди рддреЛ рдкрд╣рд▓реЗ рдФрд░ рди рд╣реА рдЕрдВрддрд┐рдо рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ "рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрднреЛрдЧ рдХрд┐рдП рдЧрдП" рд░рд╛рдЬреНрдп рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рддрддреНрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓реЙрдХрд▓реЗрд╕ рдХреНрдпреВ ()
{
рдкрд╣рд▓реА = рдирдИ рдХреНрд╡реАрдЯреЗрдо ();
рдЕрдВрддрд┐рдо = рдкрд╣рд▓рд╛;
}
рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЖрдЧреЗ рдХреЗ рддрд░реАрдХреЗ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЗрд╕рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ред
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЙрдкрдЬ (рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢)
{
last.next = new queItem (рд╕рдВрджреЗрд╢);
last = last.next;
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ рдЦрдкрдд (рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢ рдмрд╛рд╣рд░)
{
рдЕрдЧрд░ (рдкрд╣рд▓рд╛ == рдЕрдВрддрд┐рдо || рдкрд╣рд▓рд╛.рдиреЗрдХреНрд╕реНрдЯ == рдЕрд╢рдХреНрдд)
{
рд╕рдВрджреЗрд╢ = рдЕрд╢рдХреНрдд;
рдЭреВрдареЗ рд▓реМрдЯрдирд╛;
}
message = first.next.message;
first = first.next;
рд╕рдЪ рд▓реМрдЯрдирд╛;
}
}
рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧ рдЕрдХреЗрд▓реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЙрдирдХреНрдпреВрд░реЗрдХреНрдЪреБрдП рд╡рд░реНрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 4.0 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рди рдХреЗрд╡рд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдмрд▓реНрдХрд┐ рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрддрд╛рд░ рд╕реЗ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдЕрд╡рд░реБрджреНрдз рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрддрд╛рд░ рд╕реЗ 1.5-3 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
pruflink
рд▓реЙрдЧ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╕рдорд╡рд░реНрддреА рдХрддрд╛рд░ рд╡рд░реНрдЧ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рд╕рдорд╡рд░реНрддреА рдХреНрдпреВ рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрдВрдЯрд░-рдереНрд░реЗрдб рдореИрд╕реЗрдЬрд┐рдВрдЧ

рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ рдЙрд╕рдХреЗ рдирд╛рдо рд╕реЗ, рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ tcp рд╕реЙрдХреЗрдЯ рд╣реИрдВрдбрд▓рд░ (рдХреНрд▓рд╛рдЗрдВрдЯ рдпрд╛ рд╕рд░реНрд╡рд░) рдФрд░ рд╕реНрд╡рдпрдВ рдереНрд░реЗрдб рд╣реИрдВрдбрд▓рд░ рд╣реИрдВред рдпрд╣ рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдиреЛрдЯ рдХреЗ рдмрд╛рд╣рд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЕрднреА рднреА рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ - рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХреНрд╕рдЪреЗрдВрдЬ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдЬреЛрдбрд╝реЗрдВред рдореИрдВ рд╕рдорд╡рд░реНрддреА рдХреЛрдб рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЙрддреНрддрд░ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╢рд╛рд░реНрдк рдореЗрдВ, рд╕рддреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд░рдВрдн рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдПрдХ рдЕрд╡рд░реБрджреНрдз рд╕рдорд╛рдзрд╛рди рджреВрдВрдЧрд╛, рд▓рдЧрднрдЧ рд╡реИрд╕рд╛ рд╣реА рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╢рд╛рд╕реНрддреНрд░реАрдп s рдореЗрдВ рд╣реЛрдЧрд╛ред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрдгрдп рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдЦрд╛рдореА рд╣реИ, рдХрддрд╛рд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдПрдХ рднреБрдЧрддрд╛рди рд╣реИред рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рдпрд╣ рдЖрдХрд▓рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХрд┐рддрдиреА рдмрдврд╝реЗрдЧреА / рдмрд┐рдЧрдбрд╝реЗрдЧреА рдФрд░ рдХреИрд╕реЗ рдкреИрдорд╛рдирд╛ рд╣реЛрдЧрд╛, рд╢рд╛рдпрдж рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдзреНрдпрдпрди рдХрд░реВрдВрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдХрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдореЗрдВ рдпрд╣ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ рдФрд░ рджреВрд╕рд░реЗ рд╕реЗ рдкрдврд╝реЗрдЧрд╛ред рдЗрди рджреЛ рдХрддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрдВрдЯреЗрдирд░:
рдХрдХреНрд╖рд╛ рдзрд╛рдЧрд╛
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ tName;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int tid;
locklessQueue outgoing = new locklessQueue (); // рдореИрд╕реЗрдВрдЬрд░ рд╕реЗ рдиреЛрдб рддрдХ
рд▓реЙрдХрд▓реЗрд╕ рдХреНрдпреВ рдЖрд╡рдХ = рдирдпрд╛ рд▓реЙрдХрд▓реЗрд╕ рдХреНрдпреВ (); // рдиреЛрдб рд╕реЗ рдореИрд╕реЗрдВрдЬрд░ рддрдХ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдереНрд░реЗрдбрдХреЛрдб тАЛтАЛ(рд╕реНрдЯреНрд░рд┐рдВрдЧ tName, int tid)
{
this.tid = tid;
this.tName = tName;
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЧрдгрдирд╛ (рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рд╕рдВрджреЗрд╢) // рдЬрд┐рд╕реЗ рдиреЛрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
{
рдЗрдирдХрдорд┐рдВрдЧредрдкреНрд░реЛрдбреНрдпреВрд╕ (рд╕рдВрджреЗрд╢);
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ рд╡рд┐рдЪреНрдЫреЗрдж (рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рд╣рд░) // рдиреЛрдб рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
{
рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢;
bool result = outgoing.consume (out msg);
рд╕рдВрджреЗрд╢ = рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢;
рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд╕рдВрдЪрд╛рд░рд┐рдд (рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рд╕рдВрджреЗрд╢) // рдореИрд╕реЗрдВрдЬрд░ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛
{
рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ.рдкреНрд░реЛрдбреНрдпреВрд╕ (рд╕рдВрджреЗрд╢);
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд (рджреВрдд рд╕рдВрджреЗрд╢ рд╕реЗ рдмрд╛рд╣рд░) // рдореИрд╕реЗрдВрдЬрд░ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛
{
рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢;
рдмреВрд▓ рдкрд░рд┐рдгрд╛рдо = рдЗрдирдХрдорд┐рдВрдЧ.рдХреЙрдиреНрдпреВрдо (рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рд╣рд░);
рд╕рдВрджреЗрд╢ = рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢;
рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
}
}
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЯрд╛рдЗрдк рдореИрд╕реЗрдВрдЬрд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрддрд╛рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрди рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╡рд░реНрдЧ рджреВрдд
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджреЗрд╢)
{
this.from = from;
this.to = to;
this.message = message;
}
}
рдореИрдВрдиреЗ рдореИрд╕реЗрдВрдЬрд░.рд╕реЗрдВрдб (...) рд▓рд┐рдЦрдХрд░ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЛ рд╕реНрдерд┐рд░ рдмрдирд╛рдпрд╛;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рджреВрдд
{
рд╕реНрдерд┐рд░ рд╢рдмреНрджрдХреЛрд╢ <int, threadNode> byTID = new myDictionary <int, threadNode> ();
рд╕реНрдерд┐рд░ рд╢рдмреНрджрдХреЛрд╢ <string, threadNode> byRegName = new myDictionary <string, threadNode> ();
рд╕реНрдерд┐рд░ рдореНрдпреВрдЯреЗрдХреНрд╕ regMutex = рдирдпрд╛ рдореНрдпреВрдЯреЗрдХреНрд╕ (); // рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ
рдзрд╛рд░рд╛ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдиреЛрдб рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреБрдВрдЬреА рдкреНрд░рдмрдВрдзрд┐рдд рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдзрд╛рд░рд╛ рдореЗрдВ, рдХреБрдВрдЬреА рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд╛рдо рд╣реИред рд╕рдВрджреЗрд╢ рдХреЛ рдПрдХ рдиреЛрдб рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЦреЛрд▓ рдореИрдВ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджреЗрддрд╛, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдпрд╣ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдореИрд╕реЗрдВрдЬрд░рдлрдВрдХреНрд╢рди рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдереНрд░реЗрдб рдХреЛ рд╕реЛрддрд╛ рд╣реИред рдпрджрд┐ рд░рд┐рдЯрд░реНрди рдорд╛рди рдПрдХ рд╕реНрд▓рд╛рдЗрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╣реИред
рд╕реНрдЯреЗрдЯрд┐рдХ рдмреВрд▓ рдореИрд╕реЗрдВрдЬрд░рдлрдВрдХреНрд╢рди ()
{
bool acted = false;
рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдЖрдЗрдЯрдо;
рдереНрд░реЗрдбрдиреЛрдб рдбреАрдПрд╕рдЯреА;
рд╢рдмреНрджрдХреЛрд╢ <string, threadNode> tmp = byRegName;
foreach (tmp.Values тАЛтАЛрдореЗрдВ рдереНрд░реЗрдб рдиреЛрдб рдиреЛрдб)
{
рдЕрдЧрд░ (tmp! = byRegName)
рддреЛрдбрд╝;
рдЕрдЧрд░ (рдиреЛрдбред рдХреНрд░реЗрд╡рд╡ (рдЖрдЙрдЯ рдЖрдЗрдЯрдо))
рдЕрдЧрд░ (рдордж! = рдЕрд╢рдХреНрдд)
{
рдХреГрддрдХреГрддреНрдп = рд╕рддреНрдп;
рдЕрдЧрд░ (tmp.TryGetValue (item.to, out dst))
{
dst.transmit (рдЖрдЗрдЯрдо);
рднреЗрдЬрд╛ = рд╕рддреНрдп;
}
// рдФрд░ рддреНрдпрд╛рдЧреЗрдВ
}
}
рд╡рд╛рдкрд╕реА рдиреЗ рдЕрднрд┐рдирдп рдХрд┐рдпрд╛;
}
рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрд╡рд░реБрджреНрдз рд╣реИ:
рд╕реНрдерд┐рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд░рдЬрд┐рд╕реНрдЯрд░ (рд╕реНрдЯреНрд░рд┐рдВрдЧ tName)
{
if (tName == null || tName == "")
рд╡рд╛рдкрд╕реА;
int tid = Thread.CurrentThread.ManagedThreadId;
mydirectory <int, threadNode> newbyTID = new myDictionary <int, threadNode> ();
myDictionary <string, threadNode> newbyRegName = new myDictionary <string, threadNode> ();
threadNode newnode = new threadNode (tName, tid);
newbyTID.Add (tid, newnode);
newbyRegName.Add (tName, newnode);
regMutex.WaitOne ();
foreach (byNID рдореЗрдВ рдереНрд░реЗрдб рдиреЛрдб рдиреЛрдб)
{
newbyTID.Add (node.tid, node);
newbyRegName.Add (node.tName, рдиреЛрдб);
}
byTID = newbyTID;
byRegName = newbyRegName;
regMutex.ReleaseMutex ();
}
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдбреЗрд░реЗрдЧрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕рдХреЗ рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рд╡рд╣ рд╕рдм рдХреБрдЫ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред
рд╕реНрдерд┐рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рднреЗрдЬреЗрдВ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЧрдВрддрд╡реНрдп, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджреЗрд╢)
{
int tid = Thread.CurrentThread.ManagedThreadId;
рдереНрд░реЗрдбрдиреЛрдб рдиреЛрдб;
рдЕрдЧрд░ (byTID.TryGetValue (tid, out рдиреЛрдб))
node.enqueue (рдирдпрд╛ рдореИрд╕реЗрдВрдЬрд░ рдЗрдЯреЗрдо (рдиреЛрдбред рдирд╛рдо, рдЧрдВрддрд╡реНрдп, рд╕рдВрджреЗрд╢));
}
рд╕реНрдерд┐рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ рдкреНрд░рд╛рдкреНрдд (рд╡рд╕реНрддреБ рд╕рдВрджреЗрд╢, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░реЗрд╖рдХ рдмрд╛рд╣рд░)
{
int tid = Thread.CurrentThread.ManagedThreadId;
рдереНрд░реЗрдбрдиреЛрдб рдиреЛрдб;
рдЕрдЧрд░ (byTID.TryGetValue (tid, out рдиреЛрдб))
{
рдкреНрд░реЗрд╖рдХ = рдЕрд╢рдХреНрдд;
рд╕рдВрджреЗрд╢ = рдЕрд╢рдХреНрдд;
рдЭреВрдареЗ рд▓реМрдЯрдирд╛;
}
рдЕрдиреНрдпрдерд╛
{
рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдЖрдЗрдЯрдо;
рдмреВрд▓ рдкрд░рд┐рдгрд╛рдо = рдиреЛрдб.рдбреАрдХреНрдпреВ (рдЖрдЗрдЯрдо рд╕реЗ рдмрд╛рд╣рд░);
рдЕрдЧрд░ (рдкрд░рд┐рдгрд╛рдо || рдЖрдЗрдЯрдо == рдЕрд╢рдХреНрдд)
{
рдкреНрд░реЗрд╖рдХ = рдЕрд╢рдХреНрдд;
рд╕рдВрджреЗрд╢ = рдЕрд╢рдХреНрдд;
}
рдЕрдиреНрдпрдерд╛
{
message = item.message;
рдкреНрд░реЗрд╖рдХ = item.from;
}
рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
}
}
рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИрдВрдбрд▓рд░ рдереНрд░реЗрдбреНрд╕ рд▓реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛, рдпрджрд┐ рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдереНрд░реЗрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ред рд╕реЛ ()ред