рдПрдХ рд╣рдм рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд▓реЗрдЦ рдереЗред рдпрд╣ рдкреЛрд╕реНрдЯ
рдореЗрд░реЗ рд╕рд╣рдХрд░реНрдореА рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдмреНрд▓реЙрдЧ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ, рд╣рдо рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд▓реЗрдЦ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд┐рддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдХрдард┐рди рд╣реИред

рдпрд╣ рд▓реЗрдЦ рдХрд╛рдлреА рд╣рдж рддрдХ
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдЙрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ, рдореИрдВ рдХреБрдЫ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред
рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдордп рдКрдкрд░ рд╕реЗ рдПрдХ рдорд╛рддреНрд░рд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕рдордп рдХреЗ рд╕рд╛рде рдЗрди рдереНрд░реЗрдбреНрд╕ рдХреЛ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рдЧрд╛рд░рдВрдЯреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдереНрд░реЗрдбреНрд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рднрд▓реЗ рд╣реА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЗрд╕ рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╕реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддрдп рдХрд░ рд▓реЗ, рдмрд╛рдХреА рдереНрд░реЗрдбреНрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреИрд╕реЗ рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдзрд╛рдЧреЗ рд╕рдордп рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣рдореЗрд╢рд╛ рдПрдХ рдкрд░рд┐рдорд┐рдд рд╕рдордп рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдкреНрд░рддреАрдХреНрд╖рд╛-рдореБрдХреНрдд рдХреЗ рдмрдЬрд╛рдп, рд▓реЙрдХ-рдлреНрд░реА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ рдкрд░рд┐рдорд┐рдд рд╕рдордп рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ)ред
рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрдо рддреМрд░ рдкрд░ рдХреЛрдб рдХреЗ рдЖрд╕рдкрд╛рд╕ рддрд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╡рд┐рдкрд░реАрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛рддреЗ рд╣реИрдВред рдЬрдм рдХреЛрдИ рдереНрд░реЗрдб рдореЗрдореЛрд░реА рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЕрдиреНрдп рдереНрд░реЗрдб рд╕реЗ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдХреБрдЫ рдЕрдиреНрдп рдзрд╛рдЧреЗ рдиреЗ рдкрд╣рд▓реЗ рдкрд╣реБрдВрдЪ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдзрд╛рдЧрд╛ рд▓реЙрдХ рдЬрд╛рд░реА рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХреЗ рдорд╛рд▓рд┐рдХ рд╡рд╛рд▓реЗ рдереНрд░реЗрдб рдХреЛ euthanize рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдкреВрд░реНрдг рд╕рд┐рд╕реНрдЯрдо рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рддрд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рддреБрд▓рдирд╛ рдФрд░ рд╕реНрд╡реИрдк (CAS) рдХреЗ рд░реВрдк рдореЗрдВ рдЬреНрдЮрд╛рдд рдПрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рддрд░реНрдХ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреИрд╕ рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдЯрдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
1 bool CompareAndSwap(Value* addr, Value oldVal, Value newVal){ 2 if(*addr == oldVal){ 3 *addr = newVal; 4 return true; 5 }else{ 6 return false; 7 } 8 }
рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреАрди рд╣реИрдВ:
1. рдЕрдХреНрд╕рд░ рдПрдХ рд▓реЙрдХ-рдлреНрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЙрдХ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛрддрд╛ рд╣реИред
2. рд▓реЙрдХ-рдлреНрд░реА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
3. рд╕рд╣реА рд▓реЙрдХ-рдлреНрд░реА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИред
рдмрд┐рдВрджреБ рддреАрди рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдПрдХ рд╕реНрдЯреИрдХ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреИрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ-рдлреНрд░реА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдХрд╛ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдмрдирд╛рдПрдВ, рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдПрдХ рдирдП рддрддреНрд╡ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП CAS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ CAS рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдЗрдЯрдо рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ CAS рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд▓реМрдЯрддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ CAS рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдХреЗ рдмреАрдЪ рдвреЗрд░ рдХрд╛ рд╢реАрд░реНрд╖ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд╣рдо рд╢реБрд░реБрдЖрдд рд╕реЗ рд╕рдм рдХреБрдЫ рджреЛрд╣рд░рд╛рдПрдВрдЧреЗред
рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреИрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ, рдФрд░, рдХреИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ CAS рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ рд╕реНрдЯреИрдХ рд╕реЗ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдиреНрдпрдерд╛ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
C ++ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
1 template <class Entry> 2 class LockFreeStack{ 3 struct Node{ 4 Entry* entry; 5 Node* next; 6 }; 7 8 Node* m_head; 9 10 void Push(Entry* e){ 11 Node* n = new Node; 12 n->entry = e; 13 do{ 14 n->next = m_head; 15 }while(!CompareAndSwap(&m_head, n->next, n)); 16 } 17 18 Entry* Pop(){ 19 Node* old_head; 20 Entry* result; 21 do{ 22 old_head = m_head; 23 if(old_head == NULL){ 24 return NULL; 25 } 26 }while(!CompareAndSwap(&m_head, old_head, old_head->next)); 27 28 result = old_head->entry; 29 delete old_head; 30 return result; 31 } 32 }
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЙрдЪрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЙрдХ-рдлреНрд░реА рд╕реНрдЯреИрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред
sEGFAULT
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдЯреИрдХ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдлреЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдЬрд▓реНрджреА рд╕реЗ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди 22 рдкрд░ рд╣рдо рд╕реВрдЪрдХ рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдкрд░ рдкрдврд╝рддреЗ рд╣реИрдВред рдкрдВрдХреНрддрд┐ 26 рдореЗрдВ, рд╣рдо рдЙрд╕рдХреЗ рдЕрдЧрд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рд╕рдордп рдХреЗ рдмреАрдЪ рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЗрд╕рдХреЗ рдЕрдЧрд▓реЗ рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рдЙрд╕реА рд╕рдордп рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреЙрдк рдЗрд╕ рддрддреНрд╡ (рд▓рд╛рдЗрди 29) рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЕрдЧреНрд░рд╕рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди 26 рдореЗрдВ рдкрдврд╝реА рдЧрдИ рдореЗрдореЛрд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдХреНрдд рд╣реЛ рдЧрдИ рдереАред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЖрдЗрдЯрдо рдиреБрдХрд╕рд╛рди
рдПрдХ рд╕рдлрд▓ рдХреИрд╕ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдореЗрдореЛрд░реА рдХреЛ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╕рдордп рдЙрд╕рдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдЙрд╕ рд╕рдордп рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЙрд╕ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдерд╛ рдЬреЛ рдЙрд╕реЗ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЙрд╕ рд╕рдордп CAS (ptr, 5, 6) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм ptr рдореЗрдВ рдорд╛рди рдкрд╛рдБрдЪ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рдзрд╛рдЧрд╛ ptr рдореЗрдВ рдорд╛рди рдХреЛ рд╕рд╛рдд рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд╛рдБрдЪ рдХреЛ рд╡рд╛рдкрд╕, CAS рд╕рдлрд▓ рд╣реЛрдЧрд╛, рдкрд╛рдБрдЪ рд╕реЗ рдЫрд╣ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ ABA рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕реНрдЯреИрдХ рдкрд░ рджреЛ рддрддреНрд╡ рд╣реИрдВ, рдП -> рд╕реАред
рд╕реНрдЯреНрд░реАрдо 1 рдХреЙрд▓ рдкреЙрдк, рдкрдВрдХреНрддрд┐ 22 рдкрд░ m_head (A) рдкрдврд╝рддрд╛ рд╣реИ, рд▓рд╛рдЗрди 26 рдкрд░ old_head-> рдЕрдЧрд▓рд╛ (C) рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯреНрд░реАрдо рдХреЛ euthanizesред
рдереНрд░реЗрдб 2 рдкреЙрдк рдХрд╣рддрд╛ рд╣реИ, рдФрд░ рдП рддрддреНрд╡ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рдЯрд╛рддрд╛ рд╣реИред
рдереНрд░реЗрдб 2 рдкреБрд╢ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдЗрдЯрдо B рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕реНрдЯреНрд░реАрдо 2 рдХреЙрд▓ рдлрд┐рд░ рд╕реЗ рдкреБрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдП рдХреЗ рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рдПрдХ рддрддреНрд╡ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдП (рдпрд╛ рддреЛ рдП рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдЙрд╕реА рдкрддреЗ рдкрд░ рдПрдХ рдФрд░ рддрддреНрд╡ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рд╕реНрдЯреИрдХ рд╕реЗ рд▓рд┐рдпрд╛ рдерд╛ред рд╡рд╛рдкрд╕)
рд╕реНрдЯреНрд░реАрдо 1 рдЙрдарддрд╛ рд╣реИ рдФрд░ CAS рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдХреИрд╕ рд╕рдлрд▓ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, m_head рддреАрди рдмрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ! рдирддреАрдЬрддрди, рддрддреНрд╡ рдмреА рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред
рддрд╛рд▓рд╛-рдореБрдХреНрдд рдирд╣реАрдВ
C ++ рдорд╛рдирдХ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдирдП рдФрд░ рдбрд┐рд▓реАрдЯ рд▓реЙрдХ-рдлреНрд░реА рд╣реИрдВред рдпрджрд┐ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд▓реЙрдХ-рдлрд╝реНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдЬреЛ рд▓реЙрдХ-рдлрд╝реНрд░реА рдирд╣реАрдВ рд╣реИрдВ? рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓реЙрдХ-рдлрд╝реНрд░реА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рднреА рд▓реЙрдХ-рдлрд╝реНрд░реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдпрджрд┐ рдХрд┐рд╕реА рд╕реНрдореГрддрд┐ рд╕реНрдерд╛рди рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдорд╛рди 100 рд╣реИ, рдФрд░ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 200 рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдереНрд░реЗрдб рдЗрд╕рдХрд╛ рдорд╛рди рдкрдврд╝ рд░рд╣рд╛ рд╣реИ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрди рджреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдереНрд░реЗрдб рдирд╣реАрдВ рд╣реИрдВ)ред рджреВрд╕рд░реА рдзрд╛рд░рд╛ рдХреНрдпрд╛ рдкрдврд╝реЗрдЧреА? рдпрд╣ рдЙрдЪрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдпрд╛ рддреЛ 100 рдпрд╛ 200 рдкрдврд╝реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред C ++ рдореЗрдВ, рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рд╕реВрддреНрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ 42 рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред C ++ 11 рд╕реЗ рдкрд╣рд▓реЗ, рд▓реЛрдЧреЛрдВ рдиреЗ рдЙрди рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд┐рд░ рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред ред
рдкреБрд╢ рдФрд░ рдкреЙрдк рдХреЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рджреЛрдиреЛрдВ рдиреЗ m_head рдХреЛ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ m_head рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдврд╝рдиреЗ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрднреА рднреА m_head рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдСрд░реНрдбрд░
рдпрд╣ рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреЛрдиреЛрдВ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред X рдФрд░ y рджреЛрдиреЛрдВ рдХреЛ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рджреЗрдВ, рдФрд░ рдлрд┐рд░ рджреЛ рдзрд╛рдЧреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рд╕реНрдЯреНрд░реАрдо 1: рдкреНрд░рд┐рдВрдЯ рдПрдХреНрд╕; x 1 рд╣реИ; рдкреНрд░рд┐рдВрдЯ y;
рд╕реНрдЯреНрд░реАрдо 2: рдкреНрд░рд┐рдВрдЯ y; y = 1; рдкреНрд░рд┐рдВрдЯ x;
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рджреЛрдиреЛрдВ рдзрд╛рдЧреЗ рджреЛ рд╢реВрдиреНрдп рдореБрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдзрд╛рдЧрд╛ y рдХреЛ рдШрдЯрд╛рддрд╛ рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рджреВрд╕рд░рд╛ рдзрд╛рдЧрд╛ рдЙрд╕реЗ рд╕реМрдВрдкреЗ, рдЬреЛ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдХреЗ рдШрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реБрдЖ x, рдЬреЛ рдХрд┐ рдкрд╣рд▓реЗ рдзрд╛рдЧреЗ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдкрд╣рд▓реЗ рдзрд╛рдЧреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реБрдЖ рдерд╛ рдШрдЯрд╛рдпрд╛ yред рдЕрд░реНрдерд╛рддреН, рдореБрджреНрд░рд┐рдд y рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓рд╛ рдзрд╛рдЧрд╛ рдореБрджреНрд░рд┐рдд y рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдкрд░рд┐рджреГрд╢реНрдп рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреЛрдиреЛрдВ x рдФрд░ y рдХреЗ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдзрд╛рд░рд╛рдПрдВ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИрдВред
рд▓реЙрдХ-рдлреНрд░реА рд╕реНрдЯреИрдХ рдХреЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдорд╛рди рдХреЛ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЙрд╕ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рддреЛ рдЖрдк рд▓реЙрдХ-рдлреНрд░реА рд╕реНрдЯреИрдХ рдХреИрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ?
рд╡рд░реНрдгрд┐рдд рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдпрд╣рд╛рдВ рд╡реЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
sEGFAULT
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдореЗрдореЛрд░реА рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдореЗрдореЛрд░реА рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рд╣рдореЗрдВ рдкрддрд╛ рдХреИрд╕реЗ рдорд┐рд▓рд╛ рдФрд░ рд╣рдордиреЗ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛, рдЗрд╕рдХреЗ рдмреАрдЪ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд╣реЗрдЬрд╝рд░реНрдб рдкреЙрдЗрдВрдЯрд░реНрд╕ рдирд╛рдордХ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ (рдЗрд╕реЗ "рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░" рдХрд╣рддреЗ рд╣реИрдВ), рдЬрд╣рд╛рдВ рдЬрд┐рд╕ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдпрд╣ рдереНрд░реЗрдб рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдкрддрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдзрд╛рдЧрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрддреНрд╡ рд╕реНрдерд╛рдиреАрдп рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░реНрд╕ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ, рддреЛ рдЖрдк рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗред рдЖрдк рдпрд╛ рддреЛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рддрддреНрд╡ рдЕрднреА рднреА рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ (рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдмрдЪрд╛рдпрд╛ рдерд╛ред рд╕реНрдерд╛рдиреАрдп рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП)ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдзрд╛рдЧрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдмрдбрд╝реА рдХрдореА рдпрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЬрдм рдХрддрд╛рд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ (рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░), рд╕рднреА рдХреЛ рдПрдХ рдмрд╛рд░ рд╣рдЯрд╛ рджреЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЙрд╕ рд╕рдордп рдХреЗ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛) рдХреЗ рд╕рд╛рде рдХреБрдЫ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╕реНрдЯреИрдХ (рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ, рд╕реНрдХрд┐рдкрд▓рд┐рд╕реНрдЯ) рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреНрд░реАрдо рдкреЙрдЗрдВрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЖрдЗрдЯрдо рдиреБрдХрд╕рд╛рди
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдмреАрдП рд╕рдорд╕реНрдпрд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ m_head рджреЛ рдмрд╛рд░ рд╕рдорд╛рди рдореВрд▓реНрдп рдирд╣реАрдВ рд▓реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕реВрдЪрдХ рдХреЗ рд╕рд╛рде 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЪрд▓реЛ рдЗрд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╣рддреЗ рд╣реИрдВ), рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реВрдЪрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбрдмрд▓ рдХреИрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред
рддрд╛рд▓рд╛-рдореБрдХреНрдд рдирд╣реАрдВ
рд╕реНрдореГрддрд┐ рдХреА рд╕рдВрд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд┐рд░реНрдл рдореЗрдореЛрд░реА рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ, рд╣рдо рд╕реАрдзреЗ рддрддреНрд╡ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддрд┐ рддрддреНрд╡ 8 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рддрддреНрд╡ рд╕реНрдЯреИрдХ рдкрд░ рди рд╣реЛред
рдПрдХ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ
рд╣рдо рдЪрд░ :: рдкрд░рдорд╛рдгреБ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдИ рдереНрд░реЗрдб рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рд╣рдо рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ (g ++ 4.6) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА std :: atomic рдХрд╛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдпрд╣ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рдХреБрд╢рд▓ рд╣реИ :: atomic, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж memory_barrier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХреЗ рдмрд╛рдж memory_barrier рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред
рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдСрд░реНрдбрд░
C ++ 11 рдореЗрдВ, рдкрд░рдорд╛рдгреБ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдФрд░ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдо рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдереЗред рдкреНрд░рддреНрдпреЗрдХ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди рдЧрд╛рд░рдВрдЯрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЙрдХ-рдлреНрд░реА рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд░рдорд┐рдХ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИрдВ (рдпрд╣ рд╕рдмрд╕реЗ рд╕рдЦреНрдд рдЧрд╛рд░рдВрдЯреА рд╣реИ, рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдмрд╕реЗ рдзреАрдореА)ред рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реБрд╕рдВрдЧрддрддрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдПрдХ рдЖрджреЗрд╢ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рд╣реБрдП рдереЗред
рдпрджрд┐ рдЖрдк C ++ 11 рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░реНрд╕ (рдЦрддрд░реЛрдВ рд╡рд╛рд▓реЗ рдкреЙрдЗрдВрдЯрд░реНрд╕) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ aqcuire / release рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдзрд┐рдЧреНрд░рд╣рдг / рд░рд┐рд▓реАрдЬ рдХреНрдпрд╛ рд╣реИрдЕрдзрд┐рдЧреНрд░рд╣рдг / рд░рд┐рд▓реАрдЬрд╝ рдЧрд╛рд░рдВрдЯреА рдХреЛ рдирд┐рдореНрди рдкрд░рд┐рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рд╕реНрдЯреНрд░реАрдо 1 рдиреЗ рд░рд┐рд▓реАрдЬрд╝ рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рдЪрд░ рдП рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рд░рд┐рд▓реАрдЬрд╝ рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рдЪрд░ рдмреА, рдФрд░ рд╕реНрдЯреНрд░реАрдо 2 рдиреЗ рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рдмреА рдХреЛ рдкрдврд╝рд╛, рдФрд░ рд╕реНрдЯреНрд░реАрдо 1 рджреНрд╡рд╛рд░рд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ рджреЗрдЦрд╛, рддреЛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдпрджрд┐ рддрдм рд╕реНрдЯреНрд░реАрдо 2 рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рдП рдкрдврд╝рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рд╕реНрдЯреНрд░реАрдо 1 рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡ рдХреЛ рджреЗрдЦреЗрдЧрд╛ред
рд╣рдордиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдЧреНрд░рд╣рд┐рдд / рд░рд┐рд▓реАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрдм рддрдХ рдХрд┐ рдПрдХ рджрд┐рди рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ред рддреНрд░реБрдЯрд┐ рдХреЗ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрдзрд┐рдЧреНрд░рд╣рдг / рд░рд┐рд▓реАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╕рдВрднрд╡ рд╣реИ:
рдереНрд░реЗрдб 1 рдкреЙрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ
рдереНрд░реЗрдб 1 рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рдКрдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ (рд░рд┐рд▓реАрдЬрд╝ рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)
рдереНрд░реЗрдб 1 рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ, рдпрд╣ рдмрджрд▓ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ
рд╕реНрдЯреНрд░реАрдо 2 рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ (рдпрд╛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдзрд╛рдЧрд╛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ - рдЪрд▓реЛ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛ рдХреЛ
рд╕реНрдЯреНрд░реАрдо 3 рдХрд╣рддреЗ рд╣реИрдВ )
рдереНрд░реЗрдб 3 рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдмреНрд░реЗрдХрдбрд╛рдЙрди рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо
рд╕реНрдЯреНрд░реАрдо 1 рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдереНрд░реЗрдб 3 рдореЗрдореЛрд░реА рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред
рдереНрд░реЗрдб 1 dereferences рд╕реНрдЯреИрдХ рдХреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╢реАрд░реНрд╖ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ SegFault рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп рдмрд┐рдВрджреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕рдВрдЧрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдкрд░рд┐рджреГрд╢реНрдп рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдХреНрд░рдо рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП
рд╕реНрдЯреНрд░реАрдо 2 рд╕реЗ рдкрд╣рд▓реЗ
рд╕реНрдЯреНрд░реАрдо 2 рдиреЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдерд╛, рд╕реНрдерд╛рдиреАрдп рд╕реВрдЪрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ (рддрдм
рд╕реНрдЯреНрд░реАрдо 1 рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛), рдпрд╛
рд╕реНрдЯреНрд░реАрдо 1 рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рддреБрд▓рдирд╛ рдХреА рд╣реИ
рд╕реНрдЯреНрд░реАрдо 2 рдХреЗ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
рд╕реНрдЯреНрд░реАрдо 3 рд╕реНрдерд╛рдиреАрдп рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд╣рдЯрд╛рдП рдЧрдП рд╢реАрд░реНрд╖ рдХреЛ рджреЗрдЦреЗрдЧрд╛ред
рдЙрддреНрдкрд╛рджрдХрддрд╛
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕реНрдЯреИрдХ рдХреЗ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦреЗ: рдПрдХ рд▓реЙрдХ-рдлреНрд░реА, рджреВрд╕рд░рд╛ std :: mutex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рдХрдИ рд╕реВрддреНрд░ рд╢реБрд░реВ рдХрд┐рдП, рдФрд░ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рд╕рдорд╛рди рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкреБрд╢ рдФрд░ рдкреЙрдк рдХреЛ рдмреБрд▓рд╛рдпрд╛ред рдорд╛рдк рдХреЗ рд▓рд┐рдП рдбреЗрд▓ рд╕рдЯреАрдХ T5500 рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рдЧреНрд░рд╛рдл рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдПрдХреНрд╕ рдЕрдХреНрд╖ рдзрд╛рдЧреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд╡рд╛рдИ рдЕрдХреНрд╖ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ред
рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдмрд╣реБрдд рдЕрдбрд╝рдЪрди рд╣реИ - рдЗрд╕рдХрд╛ рд╢реАрд░реНрд╖ред рд╕рднреА рдзрд╛рдЧреЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд╢реАрд░реНрд╖ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдХреНрд╖рдорддрд╛ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред рдкреБрд╢ рдФрд░ рдкреЙрдк рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИ рдХрд┐ рдПрдХ рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА, рд╡реЗ рд╕рдордп рдХреА рдкреНрд░рддрд┐ рдЗрдХрд╛рдИ рдвреЗрд░ рдХреЗ рд╢реАрд░реНрд╖ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реАрдорд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдирдП рдереНрд░реЗрдбреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдХреЗрд╡рд▓ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЖрдкрдХреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХрдИ рдереНрд░реЗрдбреНрд╕ рдПрдХ рд╕рд╛рде рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд░реЗрдЧрд╛, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдереНрд░реЗрдб рдПрдХ рдирдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд, рд╕реБрдВрджрд░ рд▓реЗрдХрд┐рди рдЧрд▓рдд рд╕рдорд╛рдзрд╛рди рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЕрд╕рдлрд▓ рдХреИрд╕ рдХреЗ рдмрд╛рдж usleep (250) рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рдереНрд░реЗрдбреНрд╕ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЗрд╖реНрдЯрддрдо рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ - usleep (250) рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ 10 рдЧреБрдирд╛ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ! рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдо рдЕрд╕рдлрд▓ CAS рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреИрд╕реЗ usleep рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рддрдиреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдпрд╣ рд╣реИ рдХрд┐ рдПрдЪрдЯреАрдУрдкреА 16 рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдмрд┐рдирд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рд▓реЙрдХ-рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ 100% рд╡реНрдпрд╕реНрдд рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд▓реВрдк рдХреЗ рд╕рднреА рдзрд╛рдЧреЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдХ рдирдпрд╛ рдЪрд▓рдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рд╕реЗ HTOP 16 рдзрд╛рдЧреЗ рдореЗрдВ рд▓реЙрдХ рдХреЗ рд╕рд╛рде рд▓реЙрдХ-рдлреНрд░реА рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ:

рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓рдЧрднрдЧ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИред рдереНрд░реЗрдбреНрд╕ рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рддреБрд░рдВрдд рд╢реАрд░реНрд╖ рдиреАрдВрдж рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрджреНрднреБрдд рдЕрд╡рд▓реЛрдХрди рд╣реИ - usleep рдХреЗ рдЬреЛрдбрд╝ рдиреЗ рди рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧреА рдкреНрд░рджрд░реНрд╢рди рдХреЛ 10 рдЧреБрдирд╛ рдмрдврд╝рд╛ рджрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рд╕реАрдкреАрдпреВ рдХреА рдЦрдкрдд рдХреЛ рднреА рдХрд╛рдлреА рдХрдо рдХрд░ рджрд┐рдпрд╛ред
рдпрд╣ рд╣реИ рдХрд┐ 16 рдзрд╛рдЧреЗ рдореЗрдВ рддрд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдПрдЪрдЯреАрдУрдкреА рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ:

рдпрд╣рд╛рдВ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рддрд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдмрд┐рддрд╛рдП рдЧрдП рдереЗред
рдирд┐рд╖реНрдХрд░реНрд╖
рд▓реЙрдХ-рдлреНрд░реА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧреА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рднрд▓реЗ рд╣реА рдХреБрдЫ рдереНрд░реЗрдбреНрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдП рдЧрдП рд╣реЛрдВред рд▓реЗрдХрд┐рди рд▓реЙрдХ-рдлреНрд░реА рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдЕрдХреНрд╕рд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рдиреЛрдЯрд┐рд╕ рдпрд╛ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкрд╛рдВрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ, рдФрд░ рддрд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрд╡рд░ рдерд╛ред рдпрджрд┐ рдЖрдк рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред
рдХреЛрдб
рд╕реНрд░реЛрдд рдХреЛрдбрддрд╛рд▓реЗ рдХреЗ рд╕рд╛рде:
1 #include <mutex> 2 #include <stack> 3 4 template<class T> 5 class LockedStack{ 6 public: 7 void Push(T* entry){ 8 std::lock_guard<std::mutex> lock(m_mutex); 9 m_stack.push(entry); 10 } 11 12 // For compatability with the LockFreeStack interface, 13 // add an unused int parameter. 14 // 15 T* Pop(int){ 16 std::lock_guard<std::mutex> lock(m_mutex); 17 if(m_stack.empty()){ 18 return nullptr; 19 } 20 T* ret = m_stack.top(); 21 m_stack.pop(); 22 return ret; 23 } 24 25 private: 26 std::stack<T*> m_stack; 27 std::mutex m_mutex; 28 };
рдХреЛрдИ рд▓реЙрдХ рдирд╣реАрдВ (рдореЗрдореЛрд░реА рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ)
1 class LockFreeStack{ 2 public: 3
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб рднреА
рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ):
https://github.com/memsql/lockfree-benchрдЕрдкрдбреЗрдЯ:
рд╕реБрдЭрд╛рд╡ рдкрд░,
рдЧреБрдорд╢реБрджрд╛ рдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП std :: mutex рдХреЗ рдмрдЬрд╛рдп
рд╕реНрдкрд┐рдирд▓реЙрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреИрдХ рдЬреЛрдбрд╝рд╛ред рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдкрд┐рдирд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рд▓реЙрдХрдлреНрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд░рд╣, 250 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЛрддрд╛ рд╣реИ рдпрджрд┐ рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд▓реЙрдХ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЙрдХ-рдлреНрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА
рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рдирд┐рдХрд▓рд╛, рдФрд░ std :: mutex рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рд╕реАрдкреАрдпреВ рдХреА рдЦрдкрдд рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ usleep (250) рдХреЗ рд╕рд╛рде рд▓реЙрдХ-рдлреНрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИред

рдПрдХ рдирдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЬреАрдердм
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред