рд▓реЙрдХрд▓реЗрд╕ рдПрд▓рдЧреЛрд░рд┐рджрдо: рдореЗрдХ, рд░рд╛рдЗрдЯ, (рдЯреНрд░рд╛рдИ рдЕрдЧреЗрди) рдореЙрдбрд▓

рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдЬрд┐рд╕ рдкрд░рдорд╛рдгреБ рдЧреБрдгрди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛, рд╡рд╣ рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдореЙрдбрд▓ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рд░реЗрдордВрдб рдиреЗ "рдбреВ, рд░рд╛рдЗрдЯ, (рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ)" рдХрд╣рд╛ред

 рдХреЗ рд▓рд┐рдП (;)) {
  // рд╕рд╛рдЭрд╛ рдЪрд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд▓реЗрдВ,
  // рдЬрд┐рд╕реЗ рд╣рдо рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ
  oldValue = shareVariable;

  ... рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рд▓реЗрдВ ...

  newValue = ... рдирдП рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХрд░реЗрдВ
                 oldValue рдФрд░ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ ...

  // рдПрдХреНрд╕рдПрдХреНрд╕рдПрдХреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдПрдХреНрд╡рд╛рдпрд░, рд░рд┐рд▓реАрдЬ, рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  рдЕрдЧрд░ (InterlockedCompareExchangeXxx (
             & рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп,
             newValue, oldValue) == oldValue) {
   рддреЛрдбрд╝;  // рд░рд┐рдХреЙрд░реНрдб рд╡рд┐рдлрд▓
  }

  ... NewValue рдирд┐рдХрд╛рд▓реЗрдВ ...

 } // рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рд╣рдо рдирдП рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рд╕рд╛рдЭрд╛ рдЪрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ InterlockedCompareExchange рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рдзрд╛рд░рд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ; рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╢реБрд░реВ рд╕реЗ рд╣реА рдПрдХ рдирдП рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рдХрд┐ рдЕрдЧрд▓реА рдмрд╛рд░ рдХреЛрдИ рд╣рдореЗрдВ "рдХрд╛рдЯ" рдирд╣реАрдВ рд╕рдХрддрд╛ред

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

рдЕрдиреБрд╡рд╛рджрдХ рдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХрд╛ рд╕рд╛рд╣рд╕ рдХрд┐рдпрд╛: рдореИрдХрдбреЙрдирд▓реНрдбреНрд╕ рдХрд╛ рдмреЙрдХреНрд╕ рдСрдлрд┐рд╕ рдПрдХ рдорд╣рд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкреАрдЫреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИред рдЕрдЧрд░ рдЪреЗрдХрдЖрдЙрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдЫреЛрдЯреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЬреЗрдм рд╕реЗ рд░рдЧрдбрд╝ рд░рд╣рд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рдЧреНрд░рд╛рд╣рдХ рдФрд░ рдХреИрд╢рд┐рдпрд░ рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рд╣реИрдВ; рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдгрд╛рд▓реА рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИред рджреВрд╕рд░реА рдУрд░, рд░реЗрд╕реНрддрд░рд╛рдВ рдореЗрдВ рд╡реЗрдЯрд░ рдПрдХ рдорд╣рд▓ рд░рд╣рд┐рдд рд╕рдВрд╕рд╛рдзрди рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдЙрд╕реЗ рджреЛрдкрд╣рд░ рдХреЗ рднреЛрдЬрди рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЧреНрд░рд╛рд╣рдХ "рд╣рд┐рд▓рд╛" рдФрд░ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╡реЗрдЯрд░ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗрдЯрд░ рдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рд╡рд┐рдЪрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рд╡рд╣ рдЕрдВрддрддрдГ рдЖрдкрдХреА рдореЗрдЬ рдкрд░ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛; рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл, рдЕрдЧрд░ рд╡рд╣ рдЖрдкрдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдм рд╡рд╣ рдХрд┐рд╕реА рдФрд░ рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд┐рд╕реНрдЯрдо рдирд┐рд╖реНрдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИред



рдЕрдВрддрд┐рдо рдкреЛрд╕реНрдЯ рд╕реЗ InterlockedMultiply рдлрд╝рдВрдХреНрд╢рди рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рд▓рдЧрднрдЧ рдХреНрд░рд┐рдпрд╛: "рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░" рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдЧреБрдгрдХ рд╣реИ; "рдирдпрд╛ рдЕрд░реНрде" рдПрдХ рдХрд╛рдо рд╣реИред рдпрджрд┐ рдирдП рдореВрд▓реНрдп рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдИ, рддреЛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдВрддрд┐рдо рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн рднреА "рдбреВ, рд░рд╛рдЗрдЯ, (рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ)" рдореЙрдбрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдмрд╕ "рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ" рдЪрд░рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╣реА рдорд╛рди рд╣реЛрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдУрд╡рд░рдЯреЗрдХрд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдЪрд░ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗ; рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЪрд░рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрд░рд┐рдПрдмрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, InterlockedCompareExchange рдЙрдкрдпреЛрдЧ рд░рд┐рд▓реАрдЬрд╝ рд╡реЗрд░рд┐рдПрдВрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирдпрд╛ рдорд╛рди рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдореЗрдВ рдЕрдиреНрдп рдбреЗрдЯрд╛ (рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рд╣реА рдорд╛рдиреНрдп рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдмрд╛рдж рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдФрд░ "рдЕрдиреБрдХреВрд▓рд┐рдд" рд╕рдВрд╕реНрдХрд░рдг "рдХрд░реЛ, рд▓рд┐рдЦреЛ, (рдирд┐рд░рд╛рд╢рд╛)" рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рд▓реВрдк рднреА рдирд╣реАрдВ рд╣реИ: рдпрджрд┐ рдХреЛрдИ рдирдпрд╛ рдорд╛рди рд▓рд┐рдЦрдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдШрд╛рддрдХ рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЖрдЧреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрд╡рд┐рддреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TryEnterCriticalSection ред рдпрд╣ InterlockedCompareExchangeAcquire рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдХрд┐рд╕реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рд░рд┐рдХреЙрд░реНрдб рд╣реЛ рдХрд┐ рдЕрдиреБрднрд╛рдЧ рд╡реНрдпрд╕реНрдд рд╣реИред

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

"рдбреВ, рд░рд╛рдЗрдЯ, (рдлрд┐рд░ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ)" рдореЙрдбрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рджреЛ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп:

 рд▓рдВрдмреА рдЗрдВрдЯрд░рд▓рд╛рдХреЗрдбрд░реЗрдХреНрд╡рд╛рдпрд░ (LONG * pl рдореЗрдВ __, LONG LUnliks)
 {
   рд╡рд╛рдкрд╕реА InterlockedCompareExchangeAcquire (pl, lUnlikely, lUnlikely);
 }

 рд▓рдВрдмреА рдЗрдВрдЯрд░рд▓рд╛рдХреЗрдб рд░рд┐рдЬрд▓реНрдЯ (__ рдореЗрдВ рд▓рдВрдмреА * pl, __ рд▓рдВрдмрд╛рдИ рд▓рдВрдмреА рджреВрд░реА)
 {
   InterlockedCompareExchangeRelease (pl, lUnlikely, lUnlikely);
 }

LONG рдЪрд░ рдХреЛ рд╕реАрдзреЗ рдкрдврд╝рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпреЗ рдХрд╛рд░реНрдп рдЙрд╕ рдЖрджреЗрд╢ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ InterlockedCompareExchange рдСрдкрд░реЗрд╢рди рдореЗрдВ рддреБрд▓рдирд╛ рдФрд░ рдирдП рдорд╛рди рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдСрдкрд░реЗрд╢рди рдХреЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИрдВ:
 if (* pl == lUnlikely) * pl = lUnlikely;

рдЬреИрд╕рд╛ рдХрд┐ lUnlikely рд░реВрдк рд╕реЗ lUnlikely рд░реЗрдордВрдб рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдореВрд▓реНрдп рдЪреБрдирдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рди рд╣реЛ рдФрд░ рдХреИрд╢ рдмреНрд▓реЙрдХ рдЧрдВрджрд╛ рди рд╣реЛред (рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░реЛрдВ рдкрд░ рдирд╣реАрдВ, рдпрд╣ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рд▓рд┐рдЦрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рдЯреНрд░рд┐рдХ рд╢рд╛рдирджрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧреАред)

рддреЛ рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг:

 рд▓рдВрдмреА g_lColorChange;  // рд░рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛

 ...
 WM_SYSCOLORCHANGE рдХреЗрд╕:
  рдЗрдВрдЯрд░рд▓реЙрдХреНрдб рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ (& g_lColorChange);
  ...

 int CalculateSomethingAboutSystemColors ()
 {
  рд▓рдВрдмреА lColorChangeStart;
  рдХрд░реЛ {
   lColorChangeStart = InterlockedReadAcquire (& g_lColorChange, -1);
   COLORREF clrWindow = GetSysColor (COLOR_WINDOW);
   COLORREF clrHighlight = GetSysColor (COLOR_HIGHLIGHT);
   ... GetSysColor (...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдиреНрдп рдЧрдгрдирд╛
  } рдЬрдмрдХрд┐ (InterlockedReadRelease (
                        & g_lColorChange, -1)! = lColorChangeStart);
  рд╡рд╛рдкрд╕реА iResult;
 }

рд╣рдо рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдПрдХреНрд╡рд╛рдпрд░ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░реАрдб рд╡рд░реНрдЬрди рдирдВрдмрд░ рдХреЛ рдЙрди рдХрд▓рд░ рд╡реИрд▓реНрдпреВ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣рдо рдХреИрд▓рдХреБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
рдЬрдм рдЧрдгрдирд╛ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рд╕рд╣реЗрдЬреЗ рдЧрдП рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реА рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рд░рдВрдЧ рдмрджрд▓ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рд░рдВрдЧ рдЪрд╛рд░ рдмрд┐рд▓рд┐рдпрди рдмрд╛рд░ рдмрджрд▓ рдЧрдП рд╣реИрдВ рддреЛ рдПрдХ ABA рд╕рдорд╕реНрдпрд╛ рд╕рдВрднрд╡ рд╣реИ: рдХрд╛рдЙрдВрдЯрд░ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рдХрд╛рд░рдг рд╣рдордиреЗ рдЗрд╕реЗ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

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


All Articles