рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд╖рд╛ рдЯреВрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдХреЗ C рдореЗрдВ рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓реЗрдЦрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рдЙрди рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдкреА рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ рд╣реИред
рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рдПрдХ рдЯреВрд▓рдХрд┐рдЯ - рдПрдХ рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░, рдПрдХ рд╕реА рдкрд╛рд░реНрд╕рд░ рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕реА ++ рд▓рд┐рдЦрдирд╛ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ - рдЬреЛ рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд╡рд╛рджрдХ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдореИрдВ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдореЗрдВ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд╛рдорд░реНрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдвреВрдВрдвреВрдВрдЧрд╛ред
рдпрд╣ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ - рдЬреЛ рдХрд┐ рдИрд╡реЗрдВрдЯ-рдЖрдзрд╛рд░рд┐рдд рдЧреНрд░рд╛рд╣рдХ-рд╕реЗрд╡рд╛ рддрд░реНрдХ (рдПрдкреЛрд▓ / рдХреЗрдХреНрдпреВрдпреВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдордп рдореЗрдВ рдХрдИ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рд╕реЗрд╡рд╛ рджреА рдЬрд╛рддреА рд╣реИред рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб - рдХрд╛ рдЕрд░реНрде рд╣реИ рдЖрдзреБрдирд┐рдХ рдорд▓реНрдЯреАрдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░, рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рдХрдИ рдереНрд░реЗрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ред
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЗрд╡рд╛ рдореЙрдбрд▓ рдЖрдкрдХреЛ рдРрд╕реЗ рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ (рдЧреИрд░-рдмреНрд▓реЙрдХрд┐рдВрдЧ) рдХреЛрдб рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕, рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ: рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рдЧрд▓рддрд┐рдпрд╛рдВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдмрд╣реБрдзрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рд╕рдордЭрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреБрдЫ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдереНрд░реЗрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рддрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЗрди рдЧреИрд░-рд╕реАрдзреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдЬреЛрдбрд╝ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЬрдЯрд┐рд▓рддрд╛ рдХреА рднрд╛рд╡рдирд╛ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реА рдкрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЗрди рдкрд░рд┐рд╡рд░реНрдзрди рдХреЛ "рдорд╛рдЙрдВрдЯ рднрд╛рд╖рд╛" рдХрд╣реВрдВрдЧрд╛ред
рддреЛ рдорд╛рдЙрдВрдЯ рд╣реИ:
- рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореНрдпреВрдЯреЗрдХреНрд╕ рдирд┐рдпрдВрддреНрд░рдг;
- рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдПрдиреЛрдЯреЗрд╢рди - рд╕реНрд░реЛрдд рдЧреНрд░рдВрдереЛрдВ рдХреЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг;
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд┐рдВрдХ рдЧрд┐рдирддреА рддрдВрддреНрд░;
- C ++ рд╕реЗ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдзрд╛рд░ рд▓реЗрдирд╛;
- рд╕реА рд╕рдВрдЧрдд, рд╕реА рдПрдмреАрдЖрдИ рдХреЗ рд▓рд┐рдП рддрдВрдЧ рдмрдВрдзрдиред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдЙрдВрдЯ рд╕реЗ рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рд╕реА ++ рдореЗрдВ рдХреЛрдб рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдорд╛рдЙрдВрдЯ рдореЗрдВ рдмрд░рд╛рдмрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
1. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореНрдпреВрдЯреЗрдХреНрд╕ рдирд┐рдпрдВрддреНрд░рдг
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ MyFrontend рд╡рд░реНрдЧ рдХреА рдХреБрдЫ рд╡рд╕реНрддреБ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рд░реНрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХрд░рддреА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ num_requests рдмрдврд╝ рдЬрд╛рддреА рд╣реИ:
class MyFrontend
{
private :
Mutex state_mutex ;
unsigned num_requests ;
public :
void processRequest ( )
{
state_mutex. lock ( ) ;
++ num_requests ;
state_mutex. unlock ( ) ;
}
} ;
рдорд╛рдЙрдВрдЯ рдореИрдиреБрдЕрд▓ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
async object MyFrontend
{
private :
unsigned num_requests ;
public :
async void processRequest ( )
{
++ num_requests ;
}
} ;
async рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рджрд┐рдП рдЧрдП рдорд╛рдЙрдВрдЯ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЛ рджрд┐рдП рдЧрдП C ++ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд░рд╛рдмрд░ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдм рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MyFrontend рдХреЛ MyBackend рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ doSomething () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ num_back рдмреИрдХрдПрдВрдб рдПрдХреНрд╕реЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЧрддрд┐рд░реЛрдз рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЧреИрд░-рдкреБрдирд░рд╛рд╡рд░реНрддреА рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ MyBackend рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ State_mutex рдХреЛ рдЦрд╛рд▓реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
class MyFrontend
{
private :
Mutex state_mutex ;
unsigned num_requests ;
unsigned num_back ;
MyBackend * backend ;
public :
void processRequest ( )
{
state_mutex. lock ( ) ;
++ num_back ;
unsigned tmp_num_back = tmp_num_back ;
state_mutex. unlock ( ) ;
backend - > doSomething ( tmp_num_back ) ;
state_mutex. lock ( ) ;
++ num_requests ;
state_mutex. unlock ( ) ;
}
} ;
рдорд╛рдЙрдВрдЯ рдкрд░ рдПрдХ рд╣реА рдмрд╛рдд:
async object MyFrontend
{
private :
unsigned num_requests ;
unsigned num_back ;
MyBackend * backend ;
public :
async void processRequest ( )
{
call backend - > doSomething ( ++ num_back ) ;
++ num_requests ;
}
} ;
рдорд╛рдЙрдВрдЯ рдЕрдиреБрд╡рд╛рджрдХ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ state_mutex рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЙрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо State_mutex рд▓реЙрдХ рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрд╛рд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрдиреНрдп рдорд╛рдорд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИрдВ: рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ (рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕реА рд╡рд╕реНрддреБ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реЙрдХ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╕рдордп рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдПрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдИ рддрд╛рд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрд╕рдлрд▓ рдбрд┐рдЬрд╛рдЗрди рд╣реИ: рдЖрдкрдХреЛ рдпрд╛ рддреЛ рд╡рд╕реНрддреБ рдХреЛ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рддрд╛рд▓реЗ рдХреЛ рдПрдХ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдХреЗ, рд╣рдо рдЕрдзрд┐рдХрддрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рдЖрджрд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдмрдЪрд╛ рд▓рд┐рдпрд╛ред
2. рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдЬреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЗрд╡рд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдлреЛрдЯреЛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдлреНрд░рдВрдЯ рдПрдВрдб рд╣реИред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдлрд╝реЛрдЯреЛ рдХреЗ рд╕рд╛рде HTML- рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╡рд╛рдкрд╕реА рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреГрд╖реНрда рдлрд╝реЛрдЯреЛ рд╕реНрд╡рд╛рдореА рдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдФрд░ рдлрд╝реЛрдЯреЛ рд╕реЗ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рддрд╕реНрд╡реАрд░реЗрдВ рдХреЗрд╡рд▓ рдлреЛрдЯреЛ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рджреЛрд╕реНрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, HTTP рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (check_auth) рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдХреА рдХреБрдХреА рднреЗрдЬреЗрдВ;
- рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдорд┐рддреНрд░ (check_friends) рд╣реИрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдЬрд┐рдХ рдЧреНрд░рд╛рдлрд╝ рдкрд░реЛрд╕рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ;
- рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (get_userinfo) рдХреЗ рд▓рд┐рдП рдлрд╝реЛрдЯреЛ рд╕реНрд╡рд╛рдореА рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ;
- Check_friends рдФрд░ get_userinfo рд╕реЗ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ HTML рдкреГрд╖реНрда рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗрдВред
рдЪрд▓реЛ рд╕реА рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреА рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдХрд╛рдо рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЗрддрдиреА рд╕рд░рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдореИрдиреБрдЕрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рддрдирд╛ рдмреЛрдЭрд┐рд▓ рд╣реИ:
// .
typedef struct {
// "" , .
MReferenced parent_referenced ;
// .
MMutex state_mutex ;
uint64_t owner_id ;
uint32_t photo_id ;
// 'true', .
bool cancel ;
// get_userinfo?
bool got_userinfo ;
// ( ).
uint32_t owner_carma ;
// check_friends?
bool got_friends ;
} HttpPhotoData ;
static void http_photo_data_init ( HttpPhotoData * data )
{
m_referenced_init ( ( MReferenced * ) data ) ;
m_mutex_init ( & data - > state_mutex ) ;
data - > cancel = false ;
data - > got_userinfo = false ;
data - > got_friends = false ;
}
static void http_photo__get_userinfo_ret ( uin32_t owner_carma,
void * _data ) ;
static void http_photo__check_auth_ret ( uint64_t client_id,
void * _data ) ;
static void http_photo__end ( HttpPhotoData * data ) ;
// .
void http_photo ( char * cookie_str,
uint64_t owner_id,
uint32_t photo_id )
{
HttpPhotoData * data = m_malloc ( sizeof ( HttpPhotoData ) ) ;
http_photo_data_init ( data ) ;
data - > owner_id = owner_id ;
data - > photo_id = photo_id ;
{
m_referenced_ref ( ( MReferenced * ) data ) ;
MCallbackDesc cb ;
m_callback_desc_init_refdata ( & cb, http_photod__get_userinfo_ret, data ) ;
get_userinfo ( & cb, owner_id ) ;
}
{
m_referenced_ref ( ( MReferenced * ) data ) ;
MCallbackDesc cb ;
m_callback_desc_init_refdata ( & cb, http_photod__check_auth_ret, data ) ;
check_auth ( & cb, cookie_str ) ;
}
m_referenced_unref ( ( MReferenced * ) data ) ;
}
// get_userinfo.
static void http_photo__get_userinfo_ret ( uint32_t owner_carma,
void * _data )
{
HttpPhotoData * data = ( HttpPhotoData * ) _data ;
m_mutex_lock ( & data - > state_mutex ) ;
if ( data - > cancel ) {
m_mutex_unlock ( & data - > state_mutex ) ;
return ;
}
data - > owner_carma = owner_carma ;
data - > got_userinfo = true ;
if ( data - > got_friends ) {
// , .
http_photo_end ( data ) ;
}
m_mutex_unlock ( & data - > state_mutex ) ;
}
// check_auth.
static void http_photo__check_auth_ret ( uint64_t client_id,
void * _data )
{
HttpPhotoData * data = ( HttpPhotoData * ) _data ;
m_referenced_ref ( ( MReferenced * ) data ) ;
MCallbackDesc cb ;
m_callback_desc_init_refdata ( & cb, http_photo__check_friends_ret, data ) ;
check_friends ( & cb, client_id, data - > owner_id ) ;
}
// check_friends.
static void http_photo__check_friends_ret ( bool friends,
void * _data )
{
HttpPhotoData * data = ( HttpPhotoData * ) _data ;
m_mutex_lock ( & data - > state_mutex ) ;
if ( data - > cancel ) {
m_mutex_unlock ( & data - > state_mutex ) ;
return ;
}
data - > got_friends = true ;
if ( ! friends ) {
// . .
data - > cancel = true ;
m_mutex_unlock ( & data - > state_mutex ) ;
return ;
}
if ( data - > got_userinfo ) {
// , .
http_photo_end ( data ) ;
}
m_mutex_unlock ( data - > state_mutex ) ;
}
// .
static void http_photo_end ( HttpPhotoData * data )
{
photo_send_page ( data - > owner_id, data - > photo_id, data - > owner_carma ) ;
}
рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЬрдм рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрд░рд┐рдЪрд╛рд▓рди рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рдо рдХреЗ рдирд┐рдпрдорд┐рдд рд░рдЦрд░рдЦрд╛рд╡ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдорд╛рдЙрдВрдЯ рдкрд░ рд╕рдорддреБрд▓реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
async chain void http_photo ( char * cookie_str,
uint64_t owner_id,
uint32_t photo_id )
{
async call GetUserinfoCall get_userinfo ( owner_id ) ;
async call check_auth ( cookie ) ;
gives uint64_t client_id ;
async call check_friends ( client_id, owner_id )
gives bool friends ;
if ( ! friends ) {
//
return ;
}
GetUserinfoCall gives uint32_t owner_carma ;
// HTTP- .
photo_send_page ( owner_id, photo_id, owner_carma ) ;
}
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрджреЗрд╢ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рд╕реЗ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдХреНрдд рд╣реЛ рдЧрдП рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрддреНрдкрдиреНрди рд╕реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛ рдирдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- Async рдХреЙрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрд▓рдмреИрдХ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЙрд▓рдмреИрдХ рд╕рдорд╛рдкреНрддрд┐ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдгрд╛рдо рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЪрд╛рд╣реЗ рд╡рд╣ рдПрдХ рд╕рдлрд▓ рдХреЙрд▓, рдПрдХ рдЖрдВрддрд░рд┐рдХ рддреНрд░реБрдЯрд┐, рдпрд╛ рдПрдХ рд╕рдордпрдмрд╛рд╣реНрдп рд╣реЛред
- рдпрд╣ рдХрдерди рдЙрд╕ рдмрд┐рдВрджреБ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реИред рдХреЙрд▓ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рджрд╛рдпрд░реЗ рдореЗрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдПрд╕рд┐рдВрдХреНрд╕ рдХреЙрд▓ рдФрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдПрд╕рд┐рдВрдХреНрд╕ рдХреЙрд▓ рдореЗрдВ рдХреЙрд▓ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреЙрд▓ рдХрд╛ рдирд╛рдо рд╕рдВрдХреЗрдд рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ GetUserinfoCall рджреЗрдЦреЗрдВ)ред
C рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрдВрдЬреАрд░реЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╕рдордп рдорд╛рдЙрдВрдЯ рдЬреЛ рдореБрдЦреНрдп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рд╢реНрд░реГрдВрдЦрд▓рд╛ рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ (HttpPhotoData) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ;
- рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЫреЛрдЯреЗ рд╡рд╛рд▓реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ async рдХреЙрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИрдВ;
- рдпрд╣ рд╕реА рдмрдпрд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд╕ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдорд╛рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рдмрдпрд╛рди рджреЗрддрд╛ рд╣реИред
рдорд╛рдЙрдВрдЯ рдореЗрдВ рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрдЯрд┐рд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╢рд╛рдЦрд╛рдПрдВ рдЗрддрдиреА рдЬрдЯрд┐рд▓ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╡рд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдорд╛рдЙрдВрдЯ рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдирд┐рдпрдорд┐рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рд╕рдорд╛рди рдФрд░ рд╕рдорд╛рди рд░реВрдк рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рд╕реЗ рдЬрд╡рд╛рдм рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдХреЗ рдЯреВрдЯреЗ рд╣реБрдП рдЫреЛрд░реЛрдВ рдФрд░ рд╕рд╢рд░реНрдд рдХреВрджрддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдмрджрд▓реЗ рдореЗрдВ рддреАрди рд╕реНрд╡рддрдВрддреНрд░ рдХреИрд╢ рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
async chain void search ( int key )
{
for ( int i = 0 ; i < 3 ; i ++ ) {
async call search_cache ( key, i /* cache id */ )
gives int value ;
if ( value > 0 ) {
printf ( "VALUE: %d \n " , value ) ;
break ;
}
}
}
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдорд╛рдЙрдВрдЯ рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реНрдпрдХреНрдд рдФрд░ рдкреНрд░рдпреЛрдЬреНрдп рдореЗрдВ рдПрдХ рдХреНрд╡рд╛рдВрдЯрдо рдЫрд▓рд╛рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
3. рдПрдиреЛрдЯреЗрд╢рди
рдПрдиреЛрдЯреЗрд╢рди, рдПрдиреЛрдЯреЗрдЯрд┐рдВрдЧ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╣рд╛рдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдХреЛрдб рдХрд╛ рдПрдХ рдкрд░рд┐рдЪрдп рд╣реИред рдПрдиреЛрдЯреЗрдЯрд┐рдВрдЧ рд╢рдмреНрдж рдЬрд╣рд╛рдВ рднреА рдЦрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣реАрдВ рдХрд╛рд╕реНрдЯ рдФрд░ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдЦрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдПрдиреЛрдЯреЗрдЯрд┐рдВрдЧ рд╢рдмреНрдж рдЕрдХреНрд╖рд░ '$' рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:
int * $nonnull ptr ; // NULL
MyObject * $heap myobj ; //
рдорд╛рдЙрдВрдЯ рдЕрдиреБрд╡рд╛рджрдХ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рднреА рдЖрдзрд╛рд░ рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
4. рдЙрдзрд╛рд░ рд╕реА + + рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, C рдХреА рддреБрд▓рдирд╛ рдореЗрдВ C ++ рдХреА рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдкрд░ рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрд░реНрде рдЕрд░реНрде рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред рдпрд╣ рдЪрд┐рдВрддрд╛, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо (рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╕рд╣рд┐рдд) рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо, рдЖрдВрд╢рд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд▓рд╕реЗрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ, рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдирд┐рдпрдореЛрдВ рдХреЗ рдкреВрд░реНрдг рдФрд░ рд╕рдЯреАрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдХрд╛рдо рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ рдмрдирд╛рддрд╛ рд╣реИред
рдЗрд╕реА рд╕рдордп, рдирд╛рдо рдЕрдзрд┐рднрд╛рд░ рднрд╛рд╖рд╛ рдХреА рдПрдХ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЛ рднрд╛рд╖рд╛ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рдЗрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ FAQ рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрдердХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ ред
рдорд╛рдЙрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдФрд░ рдСрдкрд░реЗрдЯрд░ рдЕрдзрд┐рднрд╛рд░, рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд, рдЕрдкрд╡рд╛рдж, RTTI рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдЖрдВрд╢рд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрдВрдЯреЗрдирд░ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднрд╛рд╖рд╛ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдирд╛рдо рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдПрдХ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд▓реЗрдХреЛрдирд┐рдХ рдЙрдкрдХрд░рдг рдмрди рдЬрд╛рдПрдЧрд╛: C ++ рдЬреИрд╕реА рдХреЛрдИ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреАред
5. рд▓рд┐рдВрдХ рдФрд░ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ
рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдорд╛рдЙрдВрдЯ рдореЗрдВ "рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕" рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджреЗрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ std :: auto_ptr рдФрд░ boost :: shared_ptrред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рднрд╛рд╖рд╛ рд╕реНрддрд░ рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдЧрд┐рдирддреА рддрдВрддреНрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ:
int @a ; //
int @@b ; //
рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╕рд░рд▓ рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдХрд╛рдЙрдВрдЯрд░ рдмрд┐рд▓реНрдЯ-рдЗрди
рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдорд╛рдЙрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ (рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ) рдореЗрдВред рд▓рд┐рдВрдХ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкрд░рд┐рдкрддреНрд░ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫреЛрд░реЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреА рд╣реИред
рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдорд╛рдЙрдВрдЯ рдореЗрдВ рд╕реА ++ рд▓рд┐рдВрдХ (рдлреЙрд░реНрдо рдЗрдВрдЯ & рдП) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рд▓рд┐рдВрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЖрдк C ++ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ рдЙрди рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдорд╛рдЙрдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реВрдВред рдЙрдирдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред
рдорд╛рдЙрдВрдЯ рднрд╛рд╖рд╛ рдЕрдиреБрд╡рд╛рджрдХ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ C ++ рднрд╛рд╖рд╛ рдХреЗ рдкрд╛рд░реНрд╕рдЯрд░ рдХреЗ рдПрдХ рдЙрдкрд╕рдореБрдЪреНрдЪрдп рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдХрд╛рдордХрд╛рдЬреА рдирд╛рдо " рд╕реНрдХреНрд░реВрдлреА " рдХреЗ рддрд╣рдд svn рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА mync.svn.sourceforge.net/svnroot/mync/trunk рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ C / C ++ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╛рдЬрд╝ рджреЗрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ: рд╢рд╛рдпрдж рдЙрдирдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдирдпрд╛ рдЬреНрдЮрд╛рди рдФрд░ рдЕрдиреБрднрд╡ рджреЗ рд╕рдХреЗ, рдФрд░ рдпрджрд┐ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рд╕рдлрд▓ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд╕рдлрд▓ рд╣реЛ рдЬрд╛рдП, рддреЛ рдПрдХ рдирдИ рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рдХ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рдЙрдВрдЯ рдкрд░ рдЬрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ, рд╡реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реА ++ рдкрд╛рд░реНрд╕рд░ рдФрд░ рд╕реА / рд╕реА ++ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рде рдореЗрдВ рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред