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

рдЖрдзреБрдирд┐рдХ рд╕реАрдкреАрдпреВ рдореЗрдореЛрд░реА рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИрдВред 2006 рдХрд╛ рдирдореВрдирд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреЗ рдкреНрд░рддрд┐ 10 рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЯрди рдиреИрдиреЛрд╕реЗрдХрдВрдб рд▓реЗ рдЧрдПред рдЧрддрд┐ рдореЗрдВ рдпрд╣ рдЕрд╕рдВрддреБрд▓рди (рдкрд░рд┐рдорд╛рдг рдХреЗ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдЖрджреЗрд╢!) рдиреЗ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдмрд╣реБ-рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреИрд╢ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ рд╣реИред рдХреИрд╢ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдордп рдХрдИ рдШрдбрд╝реА рдЪрдХреНрд░ рд╣реИред
рдЯрд┐рдкреНрдкрдгреАрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдХреИрд╢ рдХреЗ рдХрдИ рд╕реНрддрд░реЛрдВ рдХрд╛ рд╣реЛрдирд╛ рд╣реИред рд╡реЙрд▓реНрдпреВрдо рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХреИрд╢ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реИ рдФрд░ рдПрдХ рдШрдбрд╝реА рдЪрдХреНрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдореЗрдВ рд▓рдЧрднрдЧ 10 рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрддреНрдкрд╛рджрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ 3 рдпрд╛ 4 рдХреИрд╢ рд╕реНрддрд░ рд╣реЛрддреЗ рд╣реИрдВ
рд╕реАрдкреАрдпреВ
рдХреИрд╢ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ
рдХреИрд╢ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рдЖрдорддреМрд░ рдкрд░ рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реИ - 16 рд╕реЗ 256 рдмрд╛рдЗрдЯреНрд╕ (рд╕реАрдкреАрдпреВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред рдЬрдм рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдореЛрд░реА рд╕реЗрд▓ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реЗрд▓ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ
рдорд┐рд╕ (рдХреИрд╢ рдорд┐рд╕ рдпрд╛, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, "рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк" рдпрд╛ "рд╡рд╛рд░реНрдордЕрдк" рдХреИрд╢ рдорд┐рд╕) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдорд┐рд╕ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реАрдкреАрдпреВ рдХреЛ рд╕реИрдХрдбрд╝реЛрдВ рдЪрдХреНрд░реЛрдВ рддрдХ рдЗрдВрддрдЬрд╛рд░ (рд╕реНрдЯрд╛рд▓) рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдЕрдВрдд рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдкрддреЗ рдкрд░ рдмрд╛рдж рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рд╕реЗ рдХреИрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╕реАрдкреАрдпреВ рдкреВрд░реА рдЧрддрд┐ рд╕реЗ рдЪрд▓реЗрдЧрд╛ред
рдХреБрдЫ рд╕рдордп рдХреЗ рдмрд╛рдж, рдХреИрд╢ рднрд░ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдорд┐рд╕ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдирдП рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдЬрдЧрд╣ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдЪреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕реА рдорд┐рд╕рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреНрд╖рдорддрд╛
рдорд┐рд╕реЗрдЬ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреИрд╢ рдХреА рднрд░рдорд╛рд░ рд╣реЛрдиреЗ рдкрд░ рднреА рднреАрдбрд╝ рд▓рдЧ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рдПрдХ рд╣реИрд╢ рдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд
рдмрдХреЗрдЯ рдЖрдХрд╛рд░ (рдпрд╛ рдПрдХ
рд╕реЗрдЯ , рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕реАрдкреАрдпреВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ) рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджрд╛рдИрдВ рдУрд░ рдХрд╛ рдЖрдВрдХрдбрд╝рд╛ 256-рдмрд╛рдЗрдЯ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде 2-рд╕рд╛рд╣рдЪрд░реНрдп (2-рд╡реЗ) рдХреИрд╢ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд▓рд╛рдЗрди рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╕реЗрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдмрд╛рдИрдВ рдУрд░ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╡реЗ рдкрддреЗ рд╣реИрдВ рдЬреЛ рд╕реЗрд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд▓рд╛рдЗрдиреЗрдВ 256 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░реЗрдЦрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдкрддреЗ рдХреЗ рдирд┐рдЪрд▓реЗ 8 рдмрд┐рдЯреНрд╕ рд╢реВрдиреНрдп рд╣реИрдВ, рдФрд░ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЧрд▓реЗ 4 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб 0x43210E00 - 0x43210EFF рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЦреБрдж рдкрддреЗ 0x12345000 - 0x12345EFF рдкрд░ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЙрд╕реЗ 0x12345F00 рдкрддреЗ рдкрд░ рдЬрд╛рдиреЗ рджреЗрдВред рдпрд╣ рдкрддрд╛ 0xF рд▓рд╛рдЗрди рдкрд░ рд╣реИрд╢реЗрдб рд╣реИ рдФрд░ рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рджреЛрдиреЛрдВ рд╕реЗрд▓ рдЦрд╛рд▓реА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП 256 рдмрд╛рдЗрдЯреНрд╕ рдбреЗрдЯрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо 0x1233000 рдкрд░ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╣реИрд╢ 0x0 рд╣реИ, рддреЛ рдЗрд╕реА 256-рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдХреЛ 0x0 рд▓рд╛рдЗрди рдХреЗ рд╕реЗрд▓ 1 (рддрд░реАрдХрд╛ 1) рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо 0x1233E00 (рд╣реИрд╢ = 0xE) рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдирдП 256 рдмрд╛рдЗрдЯреНрд╕ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рддрд░реАрдХреЗ) рдХреЛ рдХреИрд╢ рд╕реЗ рдмрд╛рд╣рд░ рдзрдХреЗрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкреБрд╢ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдорд┐рд╕ рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЧрдбрд╝рдЧрдбрд╝рд╛рд╣рдЯ рдХреЛ рд╕рд╣рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдорд┐рд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╣ рд╕рдм рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╕рднреА рд╕реАрдкреАрдпреВ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕реАрдкреАрдпреВ рдХреЗ рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ (рдЕрдорд╛рдиреНрдп) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛ рд╕реАрдкреАрдпреВ рдХреИрд╢ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдЗрд╕реЗ рд░рд╛рдЗрдЯ рдорд┐рд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдХреИрд╢ рдореЗрдВ рдЕрдорд╛рдиреНрдп рдХрд░ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╕реАрдкреАрдпреВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ (рдФрд░ рдкрдврд╝) рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХреБрдЫ рд╕реАрдкреАрдпреВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдПрдХ рдЕрдиреНрдп рд╕реАрдкреАрдпреВ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ
рд╕рдВрдЪрд╛рд░ рдорд┐рд╕ рдирд╛рдордХ рдПрдХ рдорд┐рд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ , рдореНрдпреВрдЯреЗрдХреНрд╕ рдпрд╛ рд╕реНрдкрд┐рди-рд▓реЙрдХ
[рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ; рдореНрдпреВрдЯреЗрдХреНрд╕ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЭрдВрдбрд╛ рд╣реИ] ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛
рд╕реБрд╕рдВрдЧрддрддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдм рдкрдврд╝рдиреЗ / рдЕрдорд╛рдиреНрдп / рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде, рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЦреЛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ (рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░) рд╡рд┐рднрд┐рдиреНрди рд╕реАрдкреАрдпреВ рдореЗрдВ рдЙрдирдХреЗ рдХреИрд╢ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ред рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ
рдбреЗрдЯрд╛ рд╕реБрд╕рдВрдЧрддрддрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреИрд╢ рд╕реБрд╕рдВрдЧрддрддрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреИрд╢ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рджрд░реНрдЬрдиреЛрдВ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ MESI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 4 рд░рд╛рдЬреНрдп рд╣реИрдВред
MESI рдмрддрд╛рддрд╛ рд╣реИ
MESI 4 рд╕рдВрднрд╛рд╡рд┐рдд рдХреИрд╢ рд▓рд╛рдЗрди рд╕реНрдЯреЗрдЯреНрд╕ рд╣реИрдВ: рд╕рдВрд╢реЛрдзрд┐рдд-рдЕрдирдиреНрдп-рд╕рд╛рдЭрд╛-рдЕрдорд╛рдиреНрдпред рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрди, рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ-рдмрд┐рдЯ рдЯреИрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рдбреЗрдЯрд╛ рдЕрднреА-рдЕрднреА рдХреИрд╢ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░-рдорд╛рд▓рд┐рдХ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдЕрднреА рддрдХ рдЕрдиреНрдп рд╕реАрдкреАрдпреВ рдХреЗ рдХреИрд╢ рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕реАрдкреАрдпреВ рдбреЗрдЯрд╛ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред рдЪреВрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрди рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдмрд╕реЗ рддрд╛рдЬрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреИрд╢ рдХреА рд▓рд╛рдЗрди рдореЗрдореЛрд░реА (рдпрд╛ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдкрд░) рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдФрд░ рд▓рд╛рдЗрди рдХреЛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕реЗ рднрд░реЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХреНрд╕рдХреНрд▓реВрд╕рд┐рд╡ рд╕реНрдЯреЗрдЯ рдореЙрдбрд┐рдлрд╛рдЗрдб рд╕реЗ рдмрд╣реБрдд рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЕрднреА рддрдХ рдХреИрд╢ рдХреЗ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣рдХрд╝ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рдпрд╣, рдмрджрд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдмрд╕реЗ рддрд╛рдЬрд╝рд╛ рдбреЗрдЯрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдорд╛рд▓рд┐рдХ рдХрд┐рд╕реА рднреА рд╕рдордп рдЕрдиреНрдп рд╕реАрдкреАрдпреВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рдЭрд╛ рд╕реНрдерд┐рддрд┐ рдХрд╣рддреА рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдХреЛ рджреВрд╕рд░реЗ CPU рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХреИрд╢ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕реА рд▓рд╛рдЗрди рдХрд╛ рд╕реАрдкреАрдпреВ рдорд╛рд▓рд┐рдХ рдЕрдиреНрдп рд╕реАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡ рд╕рдордиреНрд╡рдп рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред рдЕрдирдиреНрдп рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдХреЛ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╕реАрдкреАрдпреВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрд╢ рд▓рд╛рдЗрди рд░рд┐рдХреНрдд рд╣реИ, рдЕрд░реНрдерд╛рдд рдЗрд╕рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╛ рдХрдЪрд░рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ)ред рдЬрдм рдирдП рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдЕрдорд╛рдиреНрдп рд░реЗрдЦрд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╕рднреА рд╕реАрдкреАрдпреВ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреИрд╢ рдХреЗ рд╕рдорд░реВрдкрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдХреИрд╢ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рддреЗ рд╣реИрдВред
MESI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрджреЗрд╢
рдПрдХ рд░рд╛рдЬреНрдп рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдмрджрд▓рд╛рд╡реЛрдВ рдореЗрдВ рд╕реАрдкреАрдпреВ рдХреЗ рдмреАрдЪ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╕рднреА рд╕реАрдкреАрдпреВ рдПрдХ рд╕рд╛рдЭрд╛ рдмрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рд╕рдВрджреЗрд╢ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ:
- рдкрдврд╝реЗрдВ : рдЗрд╕ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХреИрд╢ рд▓рд╛рдЗрди рдХрд╛ рднреМрддрд┐рдХ рдкрддрд╛ рдкрдврд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдврд╝реЗрдВ : рдкрд┐рдЫрд▓реЗ рд░реАрдб рд╕рдВрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдкрдврд╝реЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рдореЗрдореЛрд░реА рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреИрд╢ рд╕реЗ рдЖ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдбреЗрдЯрд╛ "рд╕рдВрд╢реЛрдзрд┐рдд" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдХреИрд╢ рдореЗрдВ рд╣реИ, рддреЛ рдРрд╕рд╛ рдХреИрд╢ рд░реАрдб рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ
- рдЕрдорд╛рдиреНрдп : рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗ рднреМрддрд┐рдХ рдкрддреЗ рдХреЛ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдХреИрд╢ рдХреЛ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реЛрдЧрд╛ред
- рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ : рдЕрдорд╛рдиреНрдп рдкреНрд░рд╛рдкреНрдд рд╕реАрдкреАрдпреВ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдЕрдорд╛рдиреНрдп рдкрдврд╝реЗрдВ : рдЗрд╕ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХреИрд╢ рд▓рд╛рдЗрди рдХрд╛ рднреМрддрд┐рдХ рдкрддрд╛ рдкрдврд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдпрд╣ рдЕрдиреНрдп рдХреИрд╢ рдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрдврд╝реЗрдВ рдФрд░ рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИред рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕рд╛рдж рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдврд╝реЗрдВ рдФрд░ рдПрдХрд╛рдзрд┐рдХ рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рд▓рд┐рдЦрд╛рд╡рдЯ : рдкрддрд╛ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕реНрдореГрддрд┐ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреИрд╢ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд▓рд╛рдЗрди рдХреЛ рдлреНрд▓рд╢ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ рдорд╢реАрди рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╡рд░ рдХреЗ рддрд╣рдд рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╣реИред
рдХреНрдпреВ рдПрдВрдб рдПрдпрджрд┐ рджреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ ("рд╡рд┐рдЬреЗрддрд╛") рдкрд╣рд▓реЗ рд╕рд╛рдЭрд╛ рдмрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдЕрдиреНрдп CPU рдХреЛ рдЗрд╕ рдХреИрд╢ рд▓рд╛рдЗрди рдХреА рдЕрдкрдиреА рдкреНрд░рддрд┐рдпрд╛рдБ рдЕрдорд╛рдиреНрдп рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдПрдХ "рд╣рд╛рд░реЗ рд╣реБрдП" рд╕реАрдкреАрдпреВ рддреБрд░рдВрдд рдПрдХ рд░реАрдб рдЕрдорд╛рдиреНрдп рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреАрддрдирд╛ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рд╕рдВрджреЗрд╢ "рдЕрдорд╛рдиреНрдп" рдПрдХ рдмрдбрд╝реЗ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рднреА CPU рдХреЛ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдРрд╕реЗ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд╡рд┐рд╕реНрдлреЛрдЯрдХ рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛?
рд╣рд╛рдВ, рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NUMA рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА-рдмреЗрд╕реНрдб [Directory in NUMA - рдиреЛрдб, рдиреЛрдб] рдХреИрд╢реЗ рдХреЛрд╣реЗрд░рд┐рдЯреА рд╕рдкреЛрд░реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
MESI рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ

рджрд╛рдИрдВ рдУрд░ рдЖрдХреГрддрд┐ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд░реНрде рд╣реИрдВ:
- рд╕рдВрдХреНрд░рдордг a (M -> E) : рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдкреАрдпреВ рдиреЗ рдЗрд╕реЗ рдХреИрд╢ рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП "рд░рд╛рдЗрдЯрдмреИрдХ" рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
- рд╕рдВрдХреНрд░рдордг рдмреА (рдИ -> рдПрдо) : рд╕реАрдкреАрдпреВ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рдЕрдирдиреНрдп рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рд╕рдВрдХреНрд░рдордг c (M -> I) : CPU рдХреЛ "рд╕рдВрд╢реЛрдзрд┐рдд" рд╕реНрдерд┐рддрд┐ рдореЗрдВ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рдХреИрд╢ рд▓рд╛рдЗрди рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдХреЛ рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп рдХреЙрдкреА рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ "рд░реАрдб рд░рд┐рд╕реНрдкрд╛рдВрд╕" рдФрд░ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕реАрдкреАрдпреВ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдЙрд╕рдХреЗ рдкрд╛рд╕ рдШрд░ рдкрд░ рдЗрд╕рдХреА рдкреНрд░рддрд┐ рдирд╣реАрдВ рд╣реИ
- рд╕рдВрдХреНрд░рдордг d (I -> M) : CPU рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рд░реАрдб-рдореЙрдбрд┐рдлрд╝рд╛рдЗрдб-рд░рд╛рдЗрдЯ-рд░рд╛рдЗрдЯ (RMW) рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИ, "рд░реАрдб рд░рд┐рд╕реНрдкрд╛рдВрд╕" рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рд╕рдВрдХреНрд░рдордг рдХреЛ рддрднреА рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЙрд╕реЗ рд╕рднреА "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдорд┐рд▓рддреА рд╣реИрдВ
- рд╕рдВрдХреНрд░рдордг рдИ (рдПрд╕ -> рдПрдо) : рд╕реАрдкреАрдпреВ рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рд░реАрдб-рдореЙрдбрд┐рдлрд╛рдИ-рд░рд╛рдЗрдЯ (рдЖрд░рдПрдордбрдмреНрд▓реНрдпреВ) рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред рдЗрд╕реЗ "рдЕрдорд╛рдиреНрдп" рд╕рдВрдХреЗрдд рдЖрд░рдВрдн рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдпрд╣ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рди рдХрд░ рд▓реЗ
- рд╕рдВрдХреНрд░рдордг f (M -> S) : рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рд╕реАрдкреАрдпреВ рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реИред рдирддреАрдЬрддрди, рдбреЗрдЯрд╛ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЗрдЦрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдХреНрд░рдордг рдПрдХ рд░реАрдб рд╕рд┐рдЧреНрдирд▓ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ "рд░реАрдб рд░рд┐рд╕реНрдкрд╛рдВрд╕" рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
- рд╕рдВрдХреНрд░рдордг g (E -> S) : рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рд╕реАрдкреАрдпреВ рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реИред рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рдВрдХреНрд░рдордг "рд░реАрдб" рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ "рд░реАрдб рд░рд┐рд╕реНрдкрд╛рдВрд╕" рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
- рд╕рдВрдХреНрд░рдордг h (S -> E) : CPU рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ "рдЕрдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рдЬрдм рддрдХ рд╕реАрдкреАрдпреВ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддрдм рддрдХ рд╕рдВрдХреНрд░рдордг рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдп CPU "рдХреИрд╢рдмреИрдХ" рдХреИрд╢рдмреИрдХ рд▓рд╛рдЗрди рдХреЛ "рд░рд╛рдЗрдЯрдмреИрдХ" рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реАрдкреАрдпреВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХрдорд╛рддреНрд░ рдмрди рдЬрд╛рдПред
- рд╕рдВрдХреНрд░рдордг i (E -> I) : рдПрдХ рдЕрдиреНрдп CPU рд╣рдорд╛рд░реЗ CPU рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкрд░ RMW рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рджреЗрддрд╛ рд╣реИред рд╕рдВрдХреНрд░рдордг рд╕рдВрджреЗрд╢ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдорд╛рд░рд╛ рд╕реАрдкреАрдпреВ "рд░реАрдб рд░рд┐рд╕реНрдкрд╛рдВрд╕" рдФрд░ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
- рд╕рдВрдХреНрд░рдордг j (I -> E) : рд╕реАрдкреАрдпреВ рдбреЗрдЯрд╛ рдХреЛ рдирдИ рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рд╕рдВрдХреНрд░рдордг рдХреЛ рддрдм рддрдХ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕реЗ "рд░реАрдб рд░рд┐рд╕реНрдкрд╛рдВрд╕" рдФрд░ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред рдЬреИрд╕реЗ рд╣реА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдХреИрд╢ рд▓рд╛рдЗрди рд╕рдВрдХреНрд░рдордг (рдмреА) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рд╕рдВрд╢реЛрдзрд┐рдд" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреА рд╣реИ
- рд╕рдВрдХреНрд░рдордг k (I -> S) : рд╕реАрдкреАрдпреВ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдирдИ рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ "рд░реАрдб" рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ "рд░реАрдб рд░рд┐рд╕реНрдкрд╛рдВрд╕" рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рд╕рдВрдХреНрд░рдордг рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ
- рд╕рдВрдХреНрд░рдордг l (S -> I) : рдПрдХ рдЕрдиреНрдп CPU рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЪреВрдВрдХрд┐ рдХреБрдЫ рддреАрд╕рд░реЗ CPU (рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛) рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рдВрдХреНрд░рдордг "рдЕрдорд╛рдиреНрдп" рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ рд╕реАрдкреАрдпреВ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ
рдХреНрдпреВ рдПрдВрдб рдПрд▓реЛрд╣реЗ рдХреЛ рдРрд╕реЗ рднрд╛рд░реА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рджреЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?
рдЖрдорддреМрд░ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдЬреНрдпреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдХреЗред рд▓реЗрдХрд┐рди рдРрд╕реЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдХреИрд╢ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡реЗ рдХреИрд╢ рд▓рд╛рдЗрди рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдкрд░, рдХреЗрд╡рд▓ рдХреБрдЫ рдХреИрд╢ рд▓рд╛рдЗрдиреЗрдВ рдПрдХ рд╕рдВрдХреНрд░рдордг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрд╣ рднрд╛рд░реА, рд╕рдордп-рд╡рд┐рддрд░рд┐рдд рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреИрд╢ рд╕реБрд╕рдВрдЧрддрддрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╕рд░рд▓реАрдХреГрдд MESI рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред
MESI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╢ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреА рд╕реАрдзреА рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 4-рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП MESI рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкрддрд╛ 0 рдкрд░ рдбреЗрдЯрд╛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╣реИред рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред рдкрд╣рд▓рд╛ рдХреЙрд▓рдо рдСрдкрд░реЗрд╢рди рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рддреАрд╕рд░рд╛ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЕрдЧрд▓реЗ рдЪрд╛рд░ рдХреЙрд▓рдо рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдкреАрдпреВ рдХреА рдХреИрд╢ рд▓рд╛рдЗрди рдХреА рд╕реНрдерд┐рддрд┐ (рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ / рд╕реНрдЯреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ) рд╣реИрдВ, рдЕрдВрддрд┐рдо рдХреЙрд▓рдо рд╣реИрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд╣реА рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ (V) рдпрд╛ рдирд╣реАрдВ (I)ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, CPU рдХреА рдХреИрд╢ рд▓рд╛рдЗрдиреЗрдВ "рдЕрдорд╛рдиреНрдп" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ, рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд╣реА рдбреЗрдЯрд╛ рд╣реИред рдЬрдм рд╕реАрдкреАрдпреВ 0 рдкрддрд╛ 0 рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ, рддреЛ рд╕реАрдкреАрдпреВ 0 рдХреА рдХреИрд╢ рд▓рд╛рдЗрди "рд╕рд╛рдЭрд╛" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рддреА рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреА рд╣реИред рд╕реАрдкреАрдпреВ 3 рдкрддрд╛ 0 рдкрд░ рдбреЗрдЯрд╛ рднреА рдкрдврд╝рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХреИрд╢ рд▓рд╛рдЗрдиреЗрдВ рджреЛрдиреЛрдВ рд╕реАрдкреАрдпреВ рдХреЗ рдХреИрд╢ рдореЗрдВ "рд╕рд╛рдЭрд╛" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдПрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, CPU 0 рдкрддрд╛ 8 рдкрд░ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рднреАрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирдпрд╛ рдбреЗрдЯрд╛ рдбрд╛рд▓рддрд╛ рд╣реИ (рдкрддреЗ 8 рдкрд░ рдкрдврд╝реЗрдВ)ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕реАрдкреАрдпреВ 2 рдкрддрд╛ 0 рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ (рдЖрд░рдПрдордбрдмреНрд▓реНрдпреВ рдСрдкрд░реЗрд╢рди) рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЕрдирдиреНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣реИред "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рд┐рдЧреНрдирд▓ рд╕реАрдкреАрдпреВ 3 рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдбреЗрдЯрд╛ рдЕрднреА рднреА рдореЗрдореЛрд░реА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ)ред рд╕реАрдкреАрдпреВ 2 рдлрд┐рд░ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдЖрд░рдПрдордбрдмреНрд▓реНрдпреВ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдХреИрд╢ рдореЛрдб рдХреЛ "рд╕рдВрд╢реЛрдзрд┐рдд" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдм рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИред рд╕реАрдкреАрдпреВ 1 рдПрдХ рдкрд░рдорд╛рдгреБ рд╡реГрджреНрдзрд┐ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝реЗ рдЧрдП рдЕрдорд╛рдиреНрдп рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ CPU 2 рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ CPU 2 рдореЗрдВ рд╣реА рдбреЗрдЯрд╛ рдЕрдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕реАрдкреАрдпреВ 1 рдХреА рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рдбреЗрдЯрд╛ "рд╕рдВрд╢реЛрдзрд┐рдд" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ рдФрд░ рдЕрднреА рднреА рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╕реАрдкреАрдпреВ 1 рдкрддрд╛ 8 рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ, рдЬреЛ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдореЗрдореЛрд░реА ("рд░рд╛рдЗрдЯрдмреИрдХ" рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдореЗрдВ рдлреНрд▓рд╢ рдХрд░рддрд╛ рд╣реИред
"рдкреНрд░рд╢реНрди рдФрд░ рдЙрддреНрддрд░"рдЬрдм рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреИрд╢ рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╕рднреА рд╕реАрдкреАрдпреВ рдХреА рдХреИрд╢ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ "рдЕрдорд╛рдиреНрдп" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдХрд╛ рдХреНрд░рдо рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдРрд╕рд╛ рдЕрдиреБрдХреНрд░рдо рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╕реАрдкреАрдпреВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреИрд╢ рд░реАрд╕реЗрдЯ рдирд┐рд░реНрджреЗрд╢ ("рдореЗрд░реЗ рдХреИрд╢ рдлреНрд▓рд╢") рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рд╣реИред

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

рд╕реНрдЯреЛрд░ рдмрдлрд╝рд░реНрд╕
рдЕрд╡рд╛рдВрдЫрд┐рдд рдбрд╛рдЙрдирдЯрд╛рдЗрдо рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдкреАрдпреВ рдФрд░ рдЙрд╕рдХреЗ рдХреИрд╢ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рджрд╛рдИрдВ рдУрд░ рдХреА рдЖрдХреГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдлрд░ рдХреЗ рд╕рд╛рде, рд╕реАрдкреАрдпреВ 0 рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЛ рд░рд╛рдЗрдЯ рдСрдкрд░реЗрд╢рди рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдЬрдм рдХреИрд╢ рд▓рд╛рдЗрди рдЕрдВрддрддрдГ рд╕реАрдкреАрдпреВ 1 рд╕реЗ рд╕реАрдкреАрдпреВ 0 рдореЗрдВ рдЪрд▓рддреА рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдмрдлрд░ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ 0 рдХреА рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдЧрд▓реЗ рджреЛ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗредрд╕реНрдЯреЛрд░ рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛, рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдЦрдВрдбрддрд╛ (рд╕реНрд╡рдпрдВ рд╕реНрдерд┐рд░рддрд╛), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:1 a = 1; 2 b = a + 1; 3 assert( b == 2 );
рдЪрд░ "a" рдФрд░ "b" рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди 0. рд╣реИред рдЪрд░ "a" рдкреНрд░реЛрд╕реЗрд╕рд░ 1 рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реИ, рдФрд░ рдЪрд░ "b" рдкреНрд░реЛрд╕реЗрд╕рд░ 0 рдХреА рдХреИрд╢ рдореЗрдВ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣
assert
рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддреА рд╣реИ:
- 1. CPU 0
a = 1
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ - 2. рд╕реАрдкреАрдпреВ 0 "рдХреИрд╢" рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реИ - рдорд┐рд╕
- 3. рдЗрд╕рд▓рд┐рдП, "0" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдкрд░ рд╡рд┐рд╢реЗрд╖ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ 0 "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рдВрдХреЗрдд рднреЗрдЬрддрд╛ рд╣реИред
- 4. рд╕реАрдкреАрдпреВ 0 рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЛ "рдП" рд▓рд┐рдЦрддрд╛ рд╣реИ
- ред CPU 1 рдХреЛ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ "рдХреИрд╢" рдФрд░ "рдХреИрд╢рд▓реЗрд╕" рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛рдХрд░ рдХреИрд╢ рд▓рд╛рдЗрди рднреЗрдЬрдХрд░ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред
- 6. рд╕реАрдкреАрдпреВ 0
b = a + 1
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ - 7. рд╕реАрдкреАрдпреВ 0 рд╕реАрдкреАрдпреВ 1 рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреБрд░рд╛рдирд╛, рд╢реВрдиреНрдп "рдП" рдореВрд▓реНрдп рднреА рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХреИрд╢ рдореЗрдВ рд▓рд╛рдЗрди рдбрд╛рд▓рддрд╛ рд╣реИ
- 8. CPU 0 рдЕрдкрдиреЗ рдХреИрд╢ рд╕реЗ "a" рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ - рдорд╛рди рд╢реВрдиреНрдп рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- 9. рд╕реАрдкреАрдпреВ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреИрд╢ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП "a" = 1 рдорд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИ
- 10. рд╕реАрдкреАрдпреВ 0 рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ "рдП" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рд▓рд╛рдЗрди "рдмреА" рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ (рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╕реАрдкреАрдпреВ 0 рдХреЗ рдХрдмреНрдЬреЗ рдореЗрдВ рд╣реИ)
- 11. CPU 0
assert(b == 2)
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ assert(b == 2)
рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ - assert
рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдХ" рдХреА рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реИрдВ - рдПрдХ рдХреИрд╢ рдореЗрдВ рдФрд░ рджреВрд╕рд░реА рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВред

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ:
рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдкреАрдпреВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо (рддрдерд╛рдХрдерд┐рдд
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрд░реНрдбрд░ )
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдПрдХ рд╕рд╣рдЬ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ
рд╕реНрдЯреЛрд░ рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдкреАрдпреВ рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдЯреЛрд░ рдмрдлрд░ рд╕реЗ рднреА рдкрдврд╝рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреИрд╢ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рди рдХреЛ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдЕрдЧрд▓реЗ рд░реАрдб рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдЯреЛрд░ рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЪрд░рдг 8 рдХреЛ рд╕реНрдЯреЛрд░ рдмрдлрд░ рд╕реЗ рдЪрд░ "рдП" рдХрд╛ рд╕рд╣реА рдорд╛рди 1 рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирддреАрдЬрддрди, "рдмреА" рдХрд╛ рдореВрд▓реНрдп 2 рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
рдмрдлрд╝рд░ рдФрд░ рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рд▓рд┐рдЦреЗрдВ
рдПрдХ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рдСрд░реНрдбрд░ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЪрд░ "a" рдФрд░ "b" рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди 0 рд╣реИ:
1 void foo() 2 { 3 a = 1; 4 b = 1; 5 } 6 7 void bar() 8 { 9 while ( b == 0 ) continue; 10 assert( a == 1 ); 11 }
рд╕реАрдкреАрдпреВ 0 рдХреЛ
foo()
рдФрд░ рд╕реАрдкреАрдпреВ 1
bar()
ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ "рдП" рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЗрд╡рд▓ рд╕реАрдкреАрдпреВ 1 рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реИ, рдФрд░ рд╕реАрдкреАрдпреВ 0 "рдмреА" рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред рддрдм рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдо рд╕рдВрднрд╡ рд╣реИ:
- 1. CPU 0
a=1
рдХрд░рддрд╛ a=1
ред "рдП" рдХреЗ рд▓рд┐рдП рдХреИрд╢ рд▓рд╛рдЗрди рд╕реАрдкреАрдпреВ 0 рдХреЗ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реАрдкреАрдпреВ 0 рдЕрдкрдиреЗ рд▓реЗрдЦрди рдмрдлрд░ рдореЗрдВ "рдП" рдирдП рдореВрд▓реНрдп рдХреЛ рд░рдЦрддрд╛ рд╣реИ рдФрд░ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред - 2. CPU 1 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ
while (b==0) continue
, рд▓реЗрдХрд┐рди "b" рдЗрд╕рдХреЗ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ "рд░реАрдб" рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ - 3. рд╕реАрдкреАрдпреВ 0
b = 1
рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ "b" рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рд▓рд╛рдЗрди "рдЕрдирдиреНрдп" рдпрд╛ "рд╕рдВрд╢реЛрдзрд┐рдд" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЙрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЛ рдмрддрд╛рдП рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдирдП "b" рдорд╛рди рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рд╣рд░ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ - 4. рд╕реАрдкреАрдпреВ 0 рд╕рдВрджреЗрд╢ "рдкрдврд╝" рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд╡реАрдирддрдо рдореВрд▓реНрдп "рдмреА" рдХреЗ рд╕рд╛рде рдПрдХ рдХреИрд╢ рд▓рд╛рдЗрди рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ "рд╕рд╛рдЭрд╛" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
- 5. рд╕реАрдкреАрдпреВ 1 "рдмреА" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ
- 6. рд╕реАрдкреАрдпреВ 1 рдЕрдм рдкреВрд░рд╛
while (b == 0) continue
, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ b == 1
, рдФрд░ рдЕрдЧрд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВ - 7. рд╕реАрдкреАрдпреВ 1
assert(a == 1)
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╕реАрдкреАрдпреВ 1 рдкреБрд░рд╛рдиреЗ рдореВрд▓реНрдп "рдП" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ - 8. рд╕реАрдкреАрдпреВ 1 рд╕рдВрджреЗрд╢ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреИрд╢ рд▓рд╛рдЗрди "рд╕реАрдкреАрдпреВ 0" рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЧрдИ
- 9. рд╕реАрдкреАрдпреВ 0 "рдХреЗ рд╕рд╛рде" рдХреИрд╢ рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдлрд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ (рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЛ рдЗрд╕рдХреЗ рдХреИрд╢ рдореЗрдВ рдлреНрд▓рд╢ рдХрд░рддрд╛ рд╣реИ)
рдХреНрдпреВ рдПрдВрдб рдПрдХреНрдпреЛрдВ рдЪрд░рдг 1 рдореЗрдВ рд╕реАрдкреАрдпреВ 0 рдХреЛ "рдЕрдорд╛рдиреНрдп" рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рди рдХреЗрд╡рд▓ "рдЕрдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдХреНрдпреЛрдВрдХрд┐ рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рди рдХреЗрд╡рд▓ рдЪрд░ "a" рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИред рдХреИрд╢ рд▓рд╛рдЗрди рдХрд╛ рдЖрдХрд╛рд░ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИред
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЪрд░ рдХреЗ рд╕рдВрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдиреЗ
рдореЗрдореЛрд░реА рдмрд╛рдзрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдХреА, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
1 void foo() 2 { 3 a = 1; 4 smp_mb(); 5 b =1; 6 } 7 8 void bar() 9 { 10 while ( b == 0 ) continue; 11 assert( a == 1 ); 12 }
рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░
smp_mb()
[рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рд╣реИ] рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЕрдЧрд▓реА рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдпрд╛ рддреЛ рдмрд╕ рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЗ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдмрд╛рдж рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ
[рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреБрдЫ рдПрдлрдЖрдИрдПрдлрдУ рдСрд░реНрдбрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ
] ред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреИрд░рд┐рдпрд░ рдЕрдиреБрдХреНрд░рдо- 1. CPU 0
a=1
рдХрд░рддрд╛ a=1
ред "рдП" рдХреЗ рд▓рд┐рдП рдХреИрд╢ рд▓рд╛рдЗрди рд╕реАрдкреАрдпреВ 0 рдХреЗ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реАрдкреАрдпреВ 0 рдЕрдкрдиреЗ рд▓реЗрдЦрди рдмрдлрд░ рдореЗрдВ "рдП" рдирдП рдореВрд▓реНрдп рдХреЛ рд░рдЦрддрд╛ рд╣реИ рдФрд░ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред - 2. CPU 1 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ
while (b==0) continue
, рд▓реЗрдХрд┐рди "b" рдЗрд╕рдХреЗ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ "рд░реАрдб" рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ - 3. CPU 0 рдиреЗ
smp_mb()
рдФрд░ рдирд┐рд╢рд╛рди рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ (рдЗрд╕рдХреЗ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВ рд╕рднреА рдЖрдЗрдЯрдо a = 1
рд╕рд╣рд┐рдд) - 4. рд╕реАрдкреАрдпреВ 0
b = 1
рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдмреА" (рдЕрд░реНрдерд╛рдд, рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рд▓рд╛рдЗрди "рд╕рдВрд╢реЛрдзрд┐рдд" рдпрд╛ "рдЕрдирдиреНрдп" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ), рд▓реЗрдХрд┐рди рд░рд╛рдЗрдЯ рдмрдлрд╝рд░ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рддрддреНрд╡ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рдХреИрд╢ рдореЗрдВ рдирдпрд╛ рдорд╛рди "рдмреА" рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ "рдмреА" рдХреЛ рдЕрдкрдиреЗ рд▓реЗрдЦрди рдмрдлрд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪрд┐рд╣реНрдирд┐рдд рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ - 5. рд╕реАрдкреАрдпреВ 0 рдПрдХ "рд░реАрдб" рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди "рдмреА" (= 0) рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ 1 рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рдХреИрд╢ рд▓рд╛рдЗрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ "рд╕рд╛рдЭрд╛" рдореЗрдВ рднреА рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
- 6. рд╕реАрдкреАрдпреВ 1 "рдмреА" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ
- 7. рд╕реАрдкреАрдпреВ 1 рдЕрдм рдкреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
while (b == 0) continue
, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ b=0
, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓реВрдк рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирдпрд╛ рдорд╛рди "рдмреА" рдЕрднреА рднреА рд╕реАрдкреАрдпреВ 0 рдХреЗ рдмрдлрд╝рд░ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реИ - 8. рд╕реАрдкреАрдпреВ 1 рд╕рдВрджреЗрд╢ "рд░реАрдб рдЕрдорд╛рдиреНрдп" рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ "рдП" рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ 0 рддрдХ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреА рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ
- 9. CPU 0 "рдХреЗ рд╕рд╛рде" рдХреИрд╢ рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреЛ "рд╕рдВрд╢реЛрдзрд┐рдд" рд╕реНрдерд┐рддрд┐ рд╕реЗ "рдП" рд╕реЗ рдмрджрд▓рдХрд░ рдПрдХ рдкрд╣рд▓реЗ рдмрдлрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИред
- 10. рдЪреВрдВрдХрд┐ рдкреНрд░рд╡реЗрд╢ "a"
smp_mb()
рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдПрдХрдорд╛рддреНрд░ рддрддреНрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП CPU 0 рдХреЛ "b" рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "b" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди "рд╕рд╛рдЭрд╛" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ - 11. рдЗрд╕рд▓рд┐рдП, CPU 0 рдкреНрд░реЛрд╕реЗрд╕рд░ 1 рдХреЛ "рдЕрдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ
- 12. рд╕реАрдкреАрдпреВ 1 "рдЕрдорд╛рдиреНрдп" рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ "рдмреА" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ 0 рдХреЛ "рдкрд╛рд╡рддреА" рд╕рдВрдХреЗрдд рднреЗрдЬрддрд╛ рд╣реИ
- 13. рд╕реАрдкреАрдпреВ 1
while (b == 0) continue
, рд▓реЗрдХрд┐рди "b" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ 0 рдХреЛ "рд░реАрдб" рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ - 14. CPU 0 "рдкрд╛рд╡рддреА" рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ "b" рд╕реЗ "рдЕрдирдиреНрдп" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдлрд┐рд░ рдХреИрд╢ рдореЗрдВ "b" рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ
- 15. рд╕реАрдкреАрдпреВ 0 "рд░реАрдб" рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ "рдмреА" рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ 1 рддрдХ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ, "рдмреА" рд╕реЗ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ "рд╕рд╛рдЭрд╛" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- 16. рд╕реАрдкреАрдпреВ 1 "рдмреА" рдХреЗ рд╕рд╛рде рдПрдХ рдХреИрд╢ рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ
- 17. CPU 1 рдЕрдм рдкреВрд░рд╛
while (b == 0) continue
рдФрд░ рдЬрд╛рд░реА рд░рдЦреЗрдВред - 18. рд╕реАрдкреАрдпреВ 1 рдЬреЛрд░рджрд╛рд░
assert(a == 1)
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдП" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдЗрд╕рдХреЗ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдпрд╣ рд╕реАрдкреАрдпреВ 0 рд╕реЗ "рдП" рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдореВрд▓реНрдп "рдП" рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣реЛрдЧрд╛ рдФрд░ assert
рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдЪреАрдЬреЗрдВ рд╕рд┐рд▓рд┐рдХреЙрди рдореЗрдВ рдХрдИ рдЬрдЯрд┐рд▓ рдЪрд░рдгреЛрдВ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддреА рд╣реИрдВред
рдПрдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЕрд╡рд╛рдВрдЫрд┐рдд рдбрд╛рдЙрдирдЯрд╛рдЗрдо
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦрди рдмрдлрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рд╕реАрдкреАрдпреВ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЕрдиреБрдХреНрд░рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЛ рднрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдПрдХ рдорд┐рд╕ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реАрдкреАрдпреВ рдХреЛ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдЕрдорд╛рдиреНрдп рдХрд╛рдо рдкреВрд░реЗ рди рд╣реЛ рдЬрд╛рдПрдВ, рддрд╛рдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рдмрдлрд░ рдХреЛ рдХреИрд╢ рдореЗрдВ рдлреНрд▓рд╢ рдХрд░ рд╕рдХреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХреЗред рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рднреА рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрдм рдмрд╛рдж рдХреЗ
рд╕рднреА рд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЪрд╛рд╣реЗ рдпреЗ рд░рд┐рдХреЙрд░реНрдб рдХреИрд╢ рдорд┐рд╕ рд╣реЛ рдЬрд╛рдПрдВ рдпрд╛ рдирд╣реАрдВред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ "рдЕрдорд╛рдиреНрдп рд╕реНрд╡реАрдХрд╛рд░" рддреЗрдЬреА рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ CPU рдХреЗ рд▓рд┐рдП "рдЕрдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢
рдХрддрд╛рд░ рдпрд╛
рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рджрд░реНрдЬ рдХрд░реЗрдВ ред
рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░
рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдорд╛рдирдиреЗ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдкреАрдпреВ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рд▓рд╛рдЗрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдорд╛рдиреНрдп рд╣реИред рдпрджрд┐ рдХреИрд╢ рд╡реНрдпрд╕реНрдд рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдорд╛рдиреНрдпрддрд╛ рдХрд╛рдлреА рд▓рдВрдмреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рддреАрд╡реНрд░рддрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рддрд╛ / рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдХреИрд╢ рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдзрд╛рд░рд╛ рд╣реИ, рд╕реАрдкреАрдпреВ рдЙрдирдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╢реЗрд╖ рд╕реАрдкреАрдпреВ рдХреЗ рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реАрдкреАрдпреВ рдХреЛ рдкреБрд╖реНрдЯрд┐ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдкреВрд░реА рд╕рдордЭ рдХреЗ рд╕рд╛рде рдХрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдиреНрдп рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрд╡реИрдз рдХрддрд╛рд░реЛрдВ рдФрд░ рд╡рд┐рдХрд▓рд╛рдВрдЧрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐
рджрд╛рдИрдВ рдУрд░ рдХрд╛ рдЖрдВрдХрдбрд╝рд╛ рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдгрд╛рд▓реА рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреИрд╢ рдХрддрд╛рд░ рдХреЗ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХрддрд╛рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реА рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕реАрдкреАрдпреВ рдХреЛ рдЕрдкрдиреА рдХрддрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╡рд╣ рдПрдХ рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ рдХрддрд╛рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЕрдорд╛рдиреНрдп рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рддреБрд░рдВрдд рдЕрдкрдирд╛ рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАред
рдПрдХ рдЕрд╡реИрдз рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдбрд╛рд▓рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реЗ рдПрдХ рд╡рд╛рджрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреИрд╢ рд▓рд╛рдЗрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА MESI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдорд╛рдиреНрдп рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдмрдлрд╝рд░ рдХрд░рдиреЗ рд╕реЗ рд╕реНрдореГрддрд┐ рдСрдкрд░реЗрд╢рди рдХреЗ рдХреНрд░рдо рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд╡рд╕рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░реЛрдВ рдФрд░ рд╕реНрдореГрддрд┐ рдмрд╛рдзрд╛рдУрдВ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрддрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╢ рдЕрдорд╛рдиреНрдпрдХрд░рдг рд╡рд┐рд▓рдВрдм рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рдмрд╛рдзрд╛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
рдЪрд░ "рдП" рдФрд░ "рдмреА" рдХреЛ рд╢реБрд░реВ рдореЗрдВ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рджреЗрдВ рдФрд░ "рдП" "рд╕рд╛рдЭрд╛" рд╕реНрдерд┐рддрд┐ (рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рджреЛрдиреЛрдВ рдкреНрд░реЛрд╕реЗрд╕рд░реЛрдВ рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реИ, рдФрд░ "рдмреА" рд╕реАрдкреАрдпреВ 0 (рдЕрд░реНрдерд╛рдд, рдХреИрд╢ рд▓рд╛рдЗрди) рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдореЗрдВ рд╣реИ "рд╡рд┐рд╢реЗрд╖" рдпрд╛ "рд╕рдВрд╢реЛрдзрд┐рдд"ред рдорд╛рди рд▓реАрдЬрд┐рдП рд╕реАрдкреАрдпреВ 0
foo()
рдФрд░ рд╕реАрдкреАрдпреВ 1
bar()
рдХрд░рддрд╛ рд╣реИ
bar()
:
1 void foo() 2 { 3 a = 1; 4 smp_mb(); 5 b = 1; 6 } 7 8 void bar() 9 { 10 while (b == 0) continue; 11 assert(a == 1); 12 }
рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
- 1. CPU 0
a=1
рдХрд░рддрд╛ a=1
ред рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗрд╡рд▓ рд╕реАрдкреАрдпреВ 0 рдХреЗ рдХреИрд╢ рдореЗрдВ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВ "рдП" рдирдпрд╛ рдореВрд▓реНрдп рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ "рдЕрдорд╛рдиреНрдп" рднреЗрдЬрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╕реАрдкреАрдпреВ 1 "рдХреИрд╢реЗ рд▓рд╛рдЗрди рдХреЛ" рдХреЗ рд╕рд╛рде "" рдлреНрд▓рд╢ рдХрд░ рджреЗред - 2. CPU 1 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ
while(b == 0) continue
, рд▓реЗрдХрд┐рди "b" рдЗрд╕рдХреЗ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ "рдкрдврд╝рд╛" рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ - 3. рд╕реАрдкреАрдпреВ 1 рд╕реАрдкреАрдпреВ 0 рд╕реЗ "рдЕрдорд╛рдиреНрдп" рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдкрдиреА рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ
- 4. рд╕реАрдкреАрдпреВ 0 рдХреЛ рд╕реАрдкреАрдпреВ 1 рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣
smp_mb()
(рд▓рд╛рдЗрди 4) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдмрдлрд░ рдореЗрдВ рдирдП рдореВрд▓реНрдп "a" рдХреЛ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИред - 5. рд╕реАрдкреАрдпреВ 0
b=1
рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдмреА" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдирдП "рдмреА" рдореВрд▓реНрдп рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ - 6. рд╕реАрдкреАрдпреВ 0 рдПрдХ "рд░реАрдб" рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреИрд╢ рд╡реИрд▓реНрдпреВ рдХреЛ рдПрдХ рдирдП рдорд╛рди "рдмреА" рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ 1 рддрдХ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ "рд╕рд╛рдЭрд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред
- 7. рд╕реАрдкреАрдпреВ 1 "рдмреА" рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ
- 8. рдЕрдм CPU 1 рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
while(b == 0) continue
рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ - 9. рд╕реАрдкреАрдпреВ 1
assert(a == 1)
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреБрд░рд╛рдиреЗ рдореВрд▓реНрдп "рдП" рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдЧ рд▓рдЧрдирд╛ рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ - рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕реАрдкреАрдпреВ 1 рдХрддрд╛рд░ рдореЗрдВ рд░рдЦреЗ "рдЕрдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рджреЗрд░реА рдХреЗ рд╕рд╛рде, рдХреИрд╢ рд▓рд╛рдЗрди "" рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ
рдХреНрдпреВ рдПрдВрдб рдП"рдЕрдорд╛рдиреНрдп" рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЪрд░рдг 1 рдореЗрдВ рднреЗрдЬреЗ рдЧрдП "рдЕрдорд╛рдиреНрдп рдкрдврд╝реЗрдВ" рдирд╣реАрдВ рд╣реИ? рдХреНрдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рд╣реИрдВ?
рд╕реАрдкреАрдпреВ 0 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреЗ рд╕рднреА рдореВрд▓реНрдп рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ "рдХреЗрд╡рд▓" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЭрд╛ рд░реАрдб-рдУрдирд▓реА рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕реАрдкреАрдпреВ 0 рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рдХреИрд╢ рд▓рд╛рдЗрди рдХреА рдЕрдкрдиреА рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрдВред рд╕рдВрджреЗрд╢ "рдЕрдорд╛рдиреНрдп" рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдХрд▓рд╛рдВрдЧрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдо рдХрд╛рдо рдЖрддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рд╕реНрдореГрддрд┐ рдЕрд╡рд░реЛрдз рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореЗрдореЛрд░реА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЬрдм рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЕрдкрдиреА рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЬрдм рддрдХ рдХрд┐ рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА рд╣реИ рддрдм рддрдХ рд╕рднреА рдмрд╛рдж рдХреА рд░реАрдбрд┐рдВрдЧ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИред
рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ
рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ, рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдФрд░ рдХрддрд╛рд░ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
foo()
рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд
foo()
рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдкрдврд╝рдирд╛ рдирд╣реАрдВ рд╣реИ), рд╕рд╛рде рд╣реА рд╕рд╛рде
bar()
рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рд╣реИ)ред
рдХрдИ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрдордЬреЛрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рддреЗрдЬ) рдореЗрдореЛрд░реА рдмрд╛рдзрд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдпрд╛ рдХреЗрд╡рд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдореЛрдЯреЗ рддреМрд░ рдкрд░, рд░реАрдб рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреЗрд╡рд▓ рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛рдиреА рдХрддрд╛рд░ рдореЗрдВ рдХреБрдЫ рдСрд░реНрдбрд░ рджреЗрддрд╛ рд╣реИ), рдФрд░ рд░рд╛рдЗрдЯ рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рднреА рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рдСрд░реНрдбрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдмрдлрд░ рдореЗрдВ)ред рдПрдХ рдкреВрд░реА рдмрд╛рдзрд╛ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреА рд╣реИред
рдЗрди рдЕрд░реНрдз-рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдпрд╣ рд╣реИ: рдмрд╛рдзрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд░реАрдб рдмреИрд░рд┐рдпрд░ рдХреЗрд╡рд▓ рд░реАрдб (рд▓реЛрдб) рдХрд╛ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рдмреИрд░рд┐рдпрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рд░реАрдбрд┐рдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдмреИрд░рд┐рдпрд░ рдХреЗ рдмрд╛рдж рд░реАрдбрд┐рдВрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрдХ рд▓реЗрдЦрди рдмрд╛рдзрд╛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ (рднрдВрдбрд╛рд░) рдХрд╛ рдЖрджреЗрд╢ рджреЗрддреА рд╣реИ: рдмрд╛рдзрд╛ рдкреВрд░реА рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╕реНрдЯреЛрд░ (рд╕реНрдЯреЛрд░) рдмрд╛рдзрд╛ рдХреЗ рдмрд╛рдж рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдкреВрд░реНрдг рдЕрд╡рд░реЛрдз рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдХреЗрд╡рд▓ рдЙрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рдЕрд╡рд░реЛрдз рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐
foo
рдФрд░
bar
рдЙрдкрдпреЛрдЧ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╣реЛ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓реЗрдВрдЧреЗ:
1 void foo() 2 { 3 a = 1; 4 smp_wmb(); // 5 b = 1; 6 } 7 8 void bar() 9 { 10 while (b == 0) continue; 11 smp_rmb(); // 11 assert(a == 1); 12 }
рдХреБрдЫ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╡рд┐рд╡рд┐рдз рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдореВрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рддреАрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕реНрдореГрддрд┐ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдмрд╛рдж
рдпрд╣реА рдЕрдиреБрд╡рд╛рдж рдХрд╛ рд╕рдорд╛рдкрди рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдзреБрдирд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдзрд╛рдУрдВ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ
рдореВрд▓ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реВрдВ - рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рд╢реЗрд╖ рд╣реИред
рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреИрд╢ / рдореЗрдореЛрд░реА - рд░реАрдбрд┐рдВрдЧ (рд▓реЛрдб) рдФрд░ рд░рд╛рдЗрдЯрд┐рдВрдЧ (рд╕реНрдЯреЛрд░) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рджреЛ рдСрдкрд░реЗрд╢рди рд╣реИрдВред рджреЛ рдСрдкрд░реЗрд╢рди рд╣рдореЗрдВ рдПрдХ рд╕рд╛рде рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рджреЗрддреЗ рд╣реИрдВ:
op1; // store load barrier ; // memory fence op2; // store load
- рд▓реЛрдб / рд▓реЛрдб - рдмрд╛рдж рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рд▓реЛрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ, рдпрд╣ рдмрд╛рдзрд╛ рдЕрдорд╛рдиреНрдп рдХрддрд╛рд░ рдореЗрдВ "рдХреНрд░рдо рдореЗрдВ рдЪреАрдЬреЗрдВ рдбрд╛рд▓рддреА рд╣реИ": рдпрд╛ рддреЛ рдЗрд╕ рдХрддрд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд▓реЗрдмрд▓ рдбрд╛рд▓рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдЖрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрддрд╛рд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдЧреАред рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдкреНрд░рдХрд╛рд╢ рдмрд╛рдзрд╛
- рд╕реНрдЯреЛрд░ / рд╕реНрдЯреЛрд░ - рдмрд╛рдж рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдпрд╛ рддреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЪрд┐рдд рдмрдлрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдорд╣рдВрдЧрд╛ рд╣реИ - рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╣рдореЗрд╢рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ), рдпрд╛, рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрд┐рд╕реА рддрд░рд╣ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдлрд┐рд░ рд╕реЗ рдЗрд╕рдХреЗ рдХреБрдЫ рдХреНрд░рдо рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдгред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд▓реНрдХрд╛ рдЕрд╡рд░реЛрдзрдХ
- рд▓реЛрдб / рд╕реНрдЯреЛрд░ - рдмрд╛рдж рдХреЗ рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рд▓реЛрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдЯреНрдЯрд╛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрд╛рдлреА рд╣рд▓реНрдХрд╛ рдЕрд╡рд░реЛрдзрдХ рднреА рд▓рдЧрддрд╛ рд╣реИред
- рд╕реНрдЯреЛрд░ / рд▓реЛрдб - рдмрд╛рдж рдХреЗ рд▓реЛрдб рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕реНрдЯреЛрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЗрд╕ рдмрд╛рдзрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдмрд╕ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд▓реЗрдмрд▓ рдбрд╛рд▓реЗрдВ? рдирд╣реАрдВ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрднреА рднреА рд╕рдЯреНрдЯрд╛ рдкрдврд╝рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдмрд╛рдзрд╛ рдХреЛ рдЗрд╕реЗ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдзреБрдирд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдкрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрд╛рдзрд╛ рд╕реНрдЯреЛрд░ рдмрдлрд░ рдХреА рдкреВрд░реНрдг рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдПрдХ рдХрдард┐рди рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИред рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛: рдпрд╣ рд╕рднреА рдХрд╛ рд╕рдмрд╕реЗ рднрд╛рд░реА рдЕрд╡рд░реЛрдз рд╣реИ
рдмрдзрд╛рдИ рд╣реЛ, рд╣рдордиреЗ рд╕реНрдкрд╛рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╕реНрдореГрддрд┐ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ!
рд╕реНрдкрд╛рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рдЖрд░рд╛рдо рд╕реЗ рдЖрд░рдПрдордУ рдореЛрдб рдореЗрдВ - рд░рд┐рд▓реИрдХреНрд╕реНрдб рдореЗрдореЛрд░реА рдСрд░реНрдбрд░рд┐рдВрдЧ) рдореЗрдВ рдПрдХ
membar
рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрд┐рдЯ рдЭрдВрдбреЗ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЗрди рдЭрдВрдбреЛрдВ рдХреЗ
#LoadLoad
рдореЗрдВ
#LoadLoad
,
#LoadStore
,
#StoreStore
,
#StoreLoad
(рдореИрдВ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЭрдВрдбреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛, рд╡реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ)ред
membar
рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдб рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╛рдзрд╛ рд╣реИ:
Load1; membar #LoadLoad; Load2
Load; membar #LoadStore; Store
Store; membar #StoreLoad; Load
Store1; membar #StoreStore; Store2
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╛рд░реНрдХ рдореЗрдВ рдкреВрд░реНрдг рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рднреА рдЭрдВрдбреЗ рдФрд░ рдЙрдирдХреЗ рд╕рдВрдпреЛрдЬрди рдПрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рдлреА рд╣рд▓реНрдХреЗ рдЕрд╡рд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ -
#StoreLoad
ред рдФрд░ рдпрд╣ рд╕реНрдкрд╛рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдХрдордЬреЛрд░-рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИред
рдЖрдЧреЗ
рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореЗрдореЛрд░реА рдмрд╛рдзрд╛рдПрдВ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдИрдВред рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рд╡реЗ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдмреБрд░рд╛рдИ рд╣реИрдВред рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреЛрдб рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рд╢реЗрдбреНрдпреВрд▓рд░ рдФрд░ рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рд▓рдЧрднрдЧ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╕реЗрдВрдмрд▓рд░ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ (рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЗрдВрдЯреЗрд▓ рдЗрдЯреЗрдирд┐рдпрдо рдПрдХ рдЕрд▓рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЦрдбрд╝рд╛ рд╣реИ - рдЗрд╕рдореЗрдВ рдЕрд╡рд░реЛрдз рд▓реЛрдб / рд╕реНрдЯреЛрд░ / рдЖрд░рдПрдордбрдмреНрд▓реНрдпреВ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЕрд╡рд░реЛрдзреЛрдВ рдХрд╛ рд╕рд╣реА рд╕реНрдерд╛рди рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд▓реЗрдХрд┐рди рдЖрдзреБрдирд┐рдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ / рдереНрд░реЗрдб рдХрдВрдЯреНрд░реЛрд▓ рдореЙрдбрд▓ рдХреЛ рдЕрддреНрдпрдзрд┐рдХ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдзрд╛рд░рд╛ рдХреЛ рд╕рдордп рдХреА рдорд╛рддреНрд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рджреВрд╕рд░реА рдзрд╛рд░рд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди (рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред , тАУ , ?
. - , , . lock-free , , , - .
рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рддрд░реАрдХрд╛, рдореИрдВ рд░реАрдб / рд╡рд┐рдпрд░ рдЕрдкреНрд░реЛрдЪ рдХрд╣реВрдВрдЧрд╛ред C ++ 11 рдорд╛рдирдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреА рдЧрдИ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдерд╛ рдФрд░ рдЕрдзрд┐рдЧреНрд░рд╣рдг / рд░рд┐рд▓реАрдЬ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдЬрд┐рд╕рдиреЗ рдорд╛рдирдХ рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдореЗрдореЛрд░реА рдмрд╛рдзрд╛рдПрдВ рдХреЗрд╡рд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдЕрд╡рд░реЛрдз рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ (рдПрдордИрдПрд╕рдЖрдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) - рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛред рдЕрдзрд┐рдЧреНрд░рд╣рдг / рд░рд┐рд▓реАрдЬрд╝ рдореЙрдбрд▓ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рдЧреЗ (рдпрд╛рдиреА рдкреНрд░реЛрд╕реЗрд╕рд░ / рдХреЛрд░) рдХреЛ рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП , рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдореЙрдбрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдореЗрдореЛрд░реА рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИредрдореИрдВ рдЕрдЧрд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд▓реЗрдЦ рдореЗрдВ C ++ 11 рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ редрд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕рд╢реБрд░реБрдЖрддрдореВрд▓ рдмрд╛рддреЗрдВ:
рдЕрдВрджрд░:
рдмрд╛рд╣рд░ рд╕реЗ: