RAII рдореБрд╣рд╛рд╡рд░реЗ рдФрд░ рддрд╛рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдореБрд╣рд╛рд╡рд░рд╛ RAII (рд╕рдВрд╕рд╛рдзрди рдЕрдзрд┐рдЧреНрд░рд╣рдг рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╣реИ) C ++ рднрд╛рд╖рд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдВрд╕рд╛рдзрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ рдореБрдХреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдЪреВрдВрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╡рд╕реНрддреБ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ рдмрд╕ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░) рдХрд╛рд░рдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ (рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рд╕рдорд╛рдкреНрддрд┐ рдпрд╛ рдЬрдм рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЗрд╕ рдореБрд╣рд╛рд╡рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рд╣реИ + ++ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЬреЛ рдмрд┐рдВрджреБ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдЕрдкрд╡рд╛рдж рджреЗрдЦреЗрдВред

.NET рдпрд╛ рдЬрд╛рд╡рд╛ рдЬреИрд╕реЗ "рдкреНрд░рдмрдВрдзрд┐рдд" рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдореБрд╣рд╛рд╡рд░реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдореЗрдореЛрд░реА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрд╕рд╛рдзрди рдерд╛ рдЬрд┐рд╕реЗ C ++ рдореЗрдВ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдХ рд░рд┐рд▓реАрдЬ (рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИрдВрдбрд▓) рдореЗрдВ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, RAII рдореБрд╣рд╛рд╡рд░ рдЕрднреА рднреА .NET рдФрд░ Java рджреЛрдиреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕ рдЬрдЯрд┐рд▓ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИред

рд╕реА # рднрд╛рд╖рд╛ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ , рдЬрд┐рд╕рдиреЗ рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рд▓реАрдЬрд╝ рдкреНрд░рджрд╛рди рдХреА рдереАред рдирд┐рдпрдд рд░реВрдк рд╕реЗ рдореБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдерд╛ (рдФрд░ рд░рд╣рддрд╛ рд╣реИ) рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрд╢рд┐рд╢ / рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрдЗрдП ReaderWriterLockSlim рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗ рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдкрд╛рдардХреЛрдВ рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



ManualLockManagerment рд╡рд┐рдзрд┐ рдореИрдиреНрдпреБрдЕрд▓ рд▓реЙрдХрд┐рдВрдЧ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЬрдмрдХрд┐ UsingBasedMethod рд╡рд┐рдзрд┐ рдПрдХ рдЫреЛрдЯреЗ рд╢реЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕ рд╢реЗрд▓ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ : UseReadLock рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд░реАрдб рд▓реЙрдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбрд┐рд╕реНрдкреЛрдЬ рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рджреЛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдмрд░рд╛рдмрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрдпрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП? рдмреЗрд╢рдХ, рдПрдХ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдмреНрд▓реЙрдХ рд╡рд╛рд▓реА "рд╕рд╛рдЗрдХрд┐рд▓" рдЕрдзрд┐рдХ рдкрдардиреАрдп рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИ?

рд▓рдЧрднрдЧред рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рд░реАрдб рд▓реЙрдХ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рдзрд┐ рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд░реАрдб рд▓реЙрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдардХ рд░реАрдб -рдХреИрдкреНрдЪрд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░реАрдлрд╝реНрд░реЗрдВрдЯреАрд╕реА рдореЛрдб) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ ReaderWriterLockSlim рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рддреБрд░рдВрдд рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐, рд▓реЙрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд, ReaderWiteriterLockSlim рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреИрдкреНрдЪрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:



рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдмреЗрдореЗрд▓ рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рдиLockException рдЕрдкрд╡рд╛рдж рдХреА рдкреАрдврд╝реА рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдореЗрдВ рд╕рдЯреАрдХ рдмрд┐рдВрджреБ рдХрд┐рддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИрдВ? рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ RAII рдореБрд╣рд╛рд╡рд░реЗ рдФрд░ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ: рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдВрддрддрдГ рдмреНрд▓реЙрдХ рдореЗрдВ рддрднреА рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╡реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╣рд▓реЗ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдереЗ ред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ: рдЪреВрдВрдХрд┐ ReaderWriterLockSlim рдСрдмреНрдЬреЗрдХреНрдЯ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреИрдкреНрдЪрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдЬрдм рдЖрдк EnterReadLock рд╡рд┐рдзрд┐ рдХреЛ рджреВрд╕рд░реА рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рджреВрд╕рд░реЗ рдореЗрдереЛрдбреЛрдб рд╡рд┐рдзрд┐ рдХреА рдкрдВрдХреНрддрд┐ 3), рдПрдХ LockRecusionException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдХреЙрд▓ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЦрд┐рд░ рдореЗрдВрдореЗрдереЛрдб рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред ExitReadLock рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдж рдореЗрдВ рдХреЙрд▓ред рдирддреАрдЬрддрди, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЗрди 4 рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдореБрдлреНрдд рд▓реЙрдХ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕реНрд╡рд╕реНрде рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛; рдЙрд╕рдХреЗ рдмрд╛рдж, рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдХреБрдЫ рдореЗрдердореЙрдб рд╡рд┐рдзрд┐ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХреНрд╕рд┐рдЯреНрд░рд┐рдбрд▓реЙрдХ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЧрддрд┐рд░реЛрдз рдФрд░ рдЕрдиреНрдп рдкрд░реЗрд╢рд╛рдиреА



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

рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреГрддреНрд░рд┐рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░рдг рдвреВрдВрдврдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрдкрдХреЗ рдЦреВрди рдХреЛ рдардВрдбрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХреНрдпреЛрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд▓реЙрдХ рдХреЛ рддрдм рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрддред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рд┐рд░реНрдл .NET 4.5 рдкрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдХреНрд░рдо рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ .NET 4.0 (рдФрд░ рдиреАрдЪреЗ) рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрдЧрд╛: EnterReadLock рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ExitReadLock рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди EnterReadLock рдХреЗ рдПрдХ рдХреЙрд▓ рдХреЗ рдмрд╛рдж ExitReadLock рдореЗрдВ рджреЛ рдХреЙрд▓ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ!



рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдкреНрд░рд┐рдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рдХреЛрдб рди рдХреЗрд╡рд▓ рд╕рдлрд▓ рд╣реЛрдЧрд╛, рдпрд╣ рд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рдмреЗрдореЗрд▓ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рдХрдВрд╕реЛрд▓ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ: " рд░реАрдбрдЖрдЙрдЯ = 4294967295, ReadLockHeld = рдЧрд▓рдд " ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рд╛рдЗрди 3 рдореЗрдВ рд╣рдордиреЗ рд▓реЙрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ 0 рддрдХ рдШрдЯрд╛ рджрд┐рдпрд╛, рдФрд░ рд▓рд╛рдЗрди 4 рдореЗрдВ рд╣рдордиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдШрдЯрд╛ рджрд┐рдпрд╛; рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрд╛рдЙрдВрдЯрд░ -1 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ 4294967295 рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ "-1" рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд░рд╛рдЗрдЯ рд▓реЙрдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдмрд╛рдж рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЪрд┐рдкрдХ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдбреЛрдк рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рд░реАрдб рд▓реЙрдХ рдЕрднреА рднреА рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдЬреНрдЮрд╛рдд рдмрдЧ рд╣реИ, рдЬреЛ рдЕрдВрддрддрдГ .NET 4.5 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред VS2012 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджреНрдпрдкрд┐ рдмрд╣реБрдд рд╕реБрдЦрдж рдирд╣реАрдВ: рдореВрд▓ рдЕрдкрд╡рд╛рдж рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд░реАрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдирдпрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЕрди-рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд▓реЙрдХ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ!

рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдпрд╛ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ !



рдЕрдм рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :



рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлреИрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдХрдмреНрдЬрд╛ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЬрдм рдкрдХрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд░рд┐рд▓реАрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреНрд░рд┐рдп рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдирд┐рд▓рд╛рдЗрдЬрд╝рд░ (рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдмреНрд▓реЙрдХ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рджреЗрдЦреЗрдВ ) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ C ++ рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ / рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдХреЗрд╡рд▓ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ ред

рдиреЛрдЯ
рдпрд╣рд╛рдБ рд╣рдо C ++ рдореЗрдВ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рдФрд░ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ C # рдореЗрдВ рдлрд╛рдЗрдирд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдлрд╛рдЗрдирд▓реА рдХреЛ рддрдм рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЧрд┐рд░ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реА # рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдм рдЕрдВрддрд┐рдо рд░реВрдк рдореЗрдВ рдпрд╣ рд╕рдлрд▓ рд╕рдВрд╕рд╛рдзрди рдХреИрдкреНрдЪрд░ рдХреЗ рдмрд╣реБрдд рддрдереНрдп ( null , IntPtr ред Zero , рдЖрджрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ) рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЪреВрдВрдХрд┐ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рдлрд▓ рдХреИрдкреНрдЪрд░ рдкрд░ рд╣реА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рдореНрди рдХреЛрдб рдпрдерд╛рд╕рдВрднрд╡ рд╕рдВрднрд╡ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдХреЛрдб рдЬреЛ someMethod рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп Memeth рд╡рд┐рдзрд┐ рдХреА рдкрдВрдХреНрддрд┐ 2 рдореЗрдВ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдкреБрди: рд▓реЙрдХ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐:

Source: https://habr.com/ru/post/In150069/


All Articles