рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ред рдмрд╛рд╣рд░ рд╕реЗ: libcds рдХрд╛ рдПрдХ рдкрд░рд┐рдЪрдп


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ libcds рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓реЙрдХ-рдлреНрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдпрд╣рд╛рдБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдБрдЧрд╛, рдпрд╣ рдмрд╕ рдмрд╛рд╣рд░ рд╕реЗ рдПрдХ рдирдЬрд╝рд░ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рддрд░рдл рд╕реЗ рдПрдХ рдирдЬрд╝рд░ рд╣реИред

рдХрдИ рдкреНрд░рд╕рд┐рджреНрдз рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ libcds рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдпрд╣ рд▓рдХреНрд╖реНрдп рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд▓реЙрдХ-рдореБрдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдиреНрдпреВрдирддрдо рд╣реИрдВ - рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдорд╛рдирдХ рдПрд╕рдЯреАрдПрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕реАрдорд╛рдУрдВ рдФрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рд╣реИред

рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ

Libcds рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдСрдл рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЗрдореЛрд░реА рд░рд┐рдХреНрд▓реЗрдореЗрд╢рди (SMR) рдореЗрдердб рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ рд╣реЗрдбрд░-рдХреЗрд╡рд▓ рд╣реИ - рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЗрдбрд░ .h рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдХреЛрд░ рдПрд╕рдПрдордЖрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рдПрд╕.рдПрдо.рдЖрд░.


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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд SMR рдПрд▓реНрдЧреЛрд░рд┐рджрдо libcds рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:


рд╕рднреА рдПрд╕рдПрдордЖрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЬреАрд╕реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрд▓ рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рдд рдЬреАрд╕реА рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИред рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп - libcds рдХреЛрд░ - рдореЗрдВ рдореВрд▓ SMR рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдПрд╕рдПрдордЖрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рд╛рд▓рд╛рдВрдХрд┐ libcds рдЖрдкрдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреАрд╕реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ? рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╣реА рдЬреАрд╕реА рдХреА рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрд╕рдПрдордЖрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪреБрдирдирд╛ рд╣реИред Libcds рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЬреАрд╕реА рдЙрдирдХреЗ рдкрд╣рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рддрд░реНрдХ, рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ GC рд╡рд░реНрдЧ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЕрдкрдирд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди GCs рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ (рд╢рд╛рдорд┐рд▓) рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрд╕рдПрдордЖрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреАрд╕реА рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдЬреАрд╕реА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рднреА рдпрд╛рдВрддреНрд░рд┐рдХреА рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬреАрд╕реА-рдирд┐рд░реНрднрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреАрд╕реА рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЬреАрд╕реА-рдлреНрд░реА рдХрдВрдЯреЗрдирд░
Libcds рдореЗрдВ GC рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ:
  • рдкрд░рд┐рд╖реНрдХреГрдд (рдмрд╛рд░реАрдХ рджрд╛рдиреЗ рд╡рд╛рд▓реЗ) рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓реЙрдХ-рдЖрдзрд╛рд░рд┐рдд рдХрдВрдЯреЗрдирд░
  • рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рд╕реЗ рдШрд┐рд░рд╛ рд╣реБрдЖ
  • рд╕реЗрдЯ рдФрд░ рдирдХреНрд╢рд╛, рдЬреЛ рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓-рдЕрдкреЗрдВрдб)ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯ / рдореИрдк рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдкрд╛рд╕ "GC" cds::gc::nogc рд▓рд┐рдП рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╣реИред cds::gc::nogc рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХрд╛ рдПрдХ рдирд┐рд╢рд╛рди рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ



рдкрд░рд┐рд╡рд╛рджреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЖрд░рдореНрдн рдХрд░рдирд╛ рдПрдХ рдЬреАрд╕реА рд╡рд╕реНрддреБ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЬреАрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрд╕ рдПрдХ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдРрдб-рдСрди рд╣реИ рдЬреЛ рдПрд╕рдПрдордЖрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЬреАрд╕реА-рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, - рдЬреАрд╕реА рдХреЗ рд╕рд╛рде рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, - рдЗрд╕рд▓рд┐рдП, рдЬреАрд╕реА-рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд╛рдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
Libcds рдореЗрдВ, рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ GC - cds::gc::HP , cds::gc::PTB , cds::urcu::gc< cds::urcu::general_buffered<> > , рдЗрддреНрдпрд╛рджрд┐ - рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЖрд░рдВрднреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ GC рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреАрд╕реА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рд╕рднреА рддрд░реНрдХреЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИрдВ; рдЗрд╕ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╣реВрдВрдЧрд╛ред

рд╣реИрдЬрд╝рд░реНрдб рдкреЙрдЗрдВрдЯрд░ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 #include <cds/init.h> //cds::Initialize  cds::Terminate #include <cds/gc/hp.h> //cds::gc::HP (Hazard Pointer) int main(int argc, char** argv) { //  libcds cds::Initialize() ; { //  Hazard Pointer  cds::gc::HP hpGC ; //  main thread  lock-free  // main thread    //   libcds cds::threading::Manager::attachThread() ; // , libcds    //     ... } //  libcds cds::Terminate() ; } 

рд╕реАрдбреАрдПрд╕ cds::Initialize() рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрдВрддрд░рд┐рдХ libcds рдбреЗрдЯрд╛ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдЬреАрд╕реА-рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ - рд╣реИрдЬрд╝рд░реНрдб рдкреЙрдЗрдВрдЯрд░, рдХреНрд▓рд╛рд╕ cds::gc::HP , рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
main рдХреЗ рдЕрдВрдд рдореЗрдВ, cds::Terminate рдХреЙрд▓ рдХрд░реЗрдВ cds::Terminate рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдореБрдХреНрдд рдХрд░реЗрдЧрд╛ред
рдХреНрдпрд╛ рдХреЙрд▓ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ :: рдЖрд░рдВрдн () рдФрд░ рд╕реАрдбреА :: рд╕рдорд╛рдкреНрдд ()?
рдХреЙрд▓ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП cds::Initialize() рдФрд░ cds::Terminate (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП DllMain dll рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдпрд╛ рдЙрдиреНрд╣реЗрдВ GCC рдХреЗ рд╕рд╛рде рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ / рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛрдЧрд╛), рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдЖрдзреЗ рдЗрдирд▓рд╛рдЗрди рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡реЗ рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдзрд╛рдЧрд╛ рдЖрд░рдВрднреАрдХрд░рдг


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

Libcds рд╕реЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 // cds::threading::Manager #include <cds/threading/model.h> int myThreadEntryPoint(void *) { //     libcds cds::threading::Manager::attachThread() ; //        // lock-free  libcds ... //    libcds cds::threading::Manager::detachThread() ; return 0; } 

cds::threading::Manager рд╡рд░реНрдЧ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд╡рд░реНрдЧ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ libcds рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдзрд╛рд░рд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдереНрд░реЗрдб рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрдзрд┐рдХ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдЗрд╕реЗ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ GC рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ thread_gc рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдзрд╛рд░рд╛ рдХрд╛ рдЖрд░рдВрдн рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 #include <cds/gc/hp.h> int myThreadEntryPoint(void *) { //     libcds cds::gc::HP::thread_gc threadGC ; //        // lock-free  libcds ... return 0; } 

рдЕрдЧрд░ рдзрд╛рд░рд╛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдзрд╛рд░рд╛ рдХреЛ рдЙрди libcds рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рдереА, рдФрд░ рд╣рдо рдЗрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкреНрд▓рдЧрдЗрди рд╣реИред рд╡реЗрдм рд╕рд░реНрд╡рд░ рдПрдХ рдереНрд░реЗрдб рдкреВрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрди рдереНрд░реЗрдб рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рди рддреЛ рдЬреАрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рди рд╣реА рдереНрд░реЗрдб рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЯрд╛рдЗрдк GC::thread_gc рдХреА рдПрдХ рд╡рд╕реНрддреБ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ GC::thread_gc ред рдХреНрдпрд╛ рдХрд░реЗрдВ?

рдЖрдкрдХреЛ libcds рдХреЗ рдЖрдВрддрд░рд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕ рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рд╕реНрдерд┐рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
 #include <cds/gc/hp.h> class LibcdsInit { public: LibcdsInit() { //  libcds cds::Initialize(); //  Hazard Pointer singleton cds::gc::hzp::GarbageCollector::Construct() ; } ~LibcdsInit() { //  Hazard Pointer singleton //  true тАУ   //  Hazard Pointer   cds::gc::hzp::GarbageCollector::Destruct(true) ; //  libcds cds::Terminate(); }; }; //    static LibcdsInit libcdsInitializator ; 

LibcdsInit initializer LibcdsInit рдмрдЬрд╛рдп LibcdsInit рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓ DllMain (рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП) рдпрд╛ рдирд┐рд░реНрдорд╛рддрд╛ / рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд╛рд░реНрдпреЛрдВ (GCC рдХреЗ рд▓рд┐рдП __attribute__((constructor)) рдореЗрдВ рд░рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдереНрд░реЗрдб рдХрд╛ cds::threading::Manager::attachThread() рдЗрд╕реЗ "рд╣рдореЗрд╢рд╛" рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓рд┐рдВрдЧ cds::threading::Manager::attachThread() :
 // cds::threading::Manager #include <cds/threading/model.h> void callback() { Cds::threading::Manager::attachThread(); //      lock-free //  libcds } 

рд╣рдо рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред



рдХрдВрдЯреЗрдирд░


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Libcds рдореЗрдВ, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рджреЛ рдмрдбрд╝реЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдирд┐рдпрдорд┐рдд рдФрд░ рдЕрд╕рд╛рдорд╛рдиреНрдп рдШреБрд╕рдкреИрдаред
рдирд┐рдпрдорд┐рдд рдПрд╕рдЯреАрдПрд▓-рд╢реИрд▓реА рдХреЗ рдХрдВрдЯреЗрдирд░ рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рд╕рднреА рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ cds::container рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ cds::container рдиреЗрдорд╕реНрдкреЗрд╕ред
рдШреБрд╕рдкреИрда рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдЙрдирдХреА рдкреНрд░рддрд┐рдпрд╛рдВред рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :: рдШреБрд╕рдкреИрда ред рдШреБрд╕рдкреИрда рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рдирд╛ рдХрд╛рд░рдг рдХреЗ рдирд╣реАрдВ, рдХрд┐ рдПрдХ рдорд╛рдирдХ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд▓реЙрдХ-рдлреНрд░реА рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдирдХрд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдзреБрдирд┐рдХ рдЙрдиреНрдирдд рдЖрдмрдВрдЯрдХ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдЖрдВрддрд░рд┐рдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдкреВрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдШреБрд╕рдкреИрда рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ - рдЙрдиреНрд╣реЗрдВ рдореЗрдореЛрд░реА рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рддрдХрдиреАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рддрддреНрд╡ рдХреЛ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд░реНрдЧ рдШреБрд╕рдкреИрда рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рднреА рджрд┐рд▓рдЪрд╕реНрдк рд▓реЙрдХ-рдлреНрд░реА рдХреЛрдб рдШреБрд╕рдкреИрда рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реИрдВред рдШреБрд╕рдкреИрда рдХреЗ рдХрдВрдЯреЗрдирд░ cds::intrusive рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ cds::intrusive ред

Libcds рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдПрдХ рд╕рдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВред рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рд╡реИрд░рд┐рдПрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рд░рд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдвреЗрд░ рдФрд░ рдХрддрд╛рд░реЗрдВред рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
 template <typename GC, typename T, typenameтАж Options> class queue { тАж }; 

рдРрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреЛ рд╡реИрд░реЗрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдПрдореБрд▓реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░, Options рдПрдХ Traits рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╡реИрд░рд┐рдПрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрдЯрд┐рд▓ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд▓рдХреНрд╖рдг рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдЬреИрд╕реЗ set , map , рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 template <typename GC, typename T, typename Traits> class set { тАж }; 

рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, make_traits рдореЗрдЯрд╛рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡реИрд░рд┐рдПрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ:
 template <typenameтАж Options> struct make_traits { typedef typename pack<OptionsтАж>::type type ; }; 

make_traits рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ make_traits рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ make_traits рдШреЛрд╖рдгрд╛ рдлрд╛рд░реНрдо рд▓реЗрддрд╛ рд╣реИ:
 struct Foo { тАж }; cds::container::SkipListSet< cds::gc::HP, Foo, typename cds::container::skip_list::make_traits< Opt1, Opt2, Opt3 >::type > theSkipListSet ; 

рдЗрд╕ рддрд░рд╣ рдХреА рдШреЛрд╖рдгрд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╢рд╛рдВрдд рджрд┐рдЦрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреА рд╣реИ - рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдХрдИ рджрд╕рд┐рдпреЛрдВ рд▓рд╛рдЗрдиреЗрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рдг рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИрдВ:
 struct Foo { тАж }; struct skipListSetTraits: public cds::container::skip_list::make_traits< Opt1, Opt2, Opt3 >::type {}; cds::container::SkipListSet< cds::gc::HP, Foo, skipListSetTraits > theSkipListSet ; 


рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рддрд░реНрдХ рд╣реИрдВ:

рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред


рд╡рд┐рдХрд▓реНрдк


рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ SMR рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рдпрд╛ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╡рд┐рдз рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рдХрдВрдЯреЗрдирд░реЛрдВ (рдорд╛рдирдЪрд┐рддреНрд░, рд╕реЗрдЯ) рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡рд┐рдзреЗрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ std::less<T> ред рдпрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рдо (рдмреИрдХ-рдСрдл рд░рдгрдиреАрддрд┐) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЗрд╕ рдпрд╛ рдЙрд╕ рд░рдгрдиреАрддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛ рдХрдВрдЯреЗрдирд░ рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдореЗрдВ рдХрдИ (рдПрдХ рджрд░реНрдЬрди рддрдХ) рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд┐рдХрд▓реНрдк рдХрд╣рддрд╛ рд╣реВрдВред рдПрд╕рдЯреАрдПрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯрд┐рдВрдЧ рдПрдХ рдХреНрд▓рд╛рд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╡рд╛рд▓реЗ рдРрд╕реЗ рд╕реНрдерд┐рддрд┐-рдирд┐рд░реНрднрд░ рддрд░реНрдХ рд╡рд░реНрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде 10 рдЯреЗрдореНрдкрд▓реЗрдЯ рддрд░реНрдХ рд╣реИрдВ, рддреЛ рдЖрдард╡реЗрдВ рддрд░реНрдХ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрдард╡реЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рднреА рд╕рд╛рдд рддрд░реНрдХреЛрдВ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, libcds рдореЗрдВ рдореИрдВ рдПрдХ рд╕реНрдерд┐рддрд┐-рд╕реНрд╡рддрдВрддреНрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛" рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШреЛрд╖рдгрд╛ рд╣реИ:
 template <typename Alloc> struct allocator { template <typename Base> struct pack: public Base { typedef Alloc allocator ; }; }; 

рдпрд╣рд╛рдВ, Alloc рдЯреЗрдореНрдкреНрд▓реЗрдЯ рддрд░реНрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Alloc рд╡рд░реНрдЧ рд╣реИ, рдФрд░ allocator рд╕рдВрд░рдЪрдирд╛ рд╕реНрд╡рдпрдВ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдирд╛рдо рд╣реИред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
 cds::opt::allocator< std::allocator<int> > 

рдЗрди рд╡рд┐рдХрд▓реНрдк рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдПрдХ рдореЗрдЯрд╛рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ traits рд╕рдВрд░рдЪрдирд╛ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреИрдХрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
Libcds рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡реИрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред

рддреБрд▓рдирд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддреА рд╣реИ


рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЬреИрд╕реЗ рдирдХреНрд╢рд╛, рд╕реЗрдЯ, рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзреЗрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред STL рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП std::less<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ T рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ T рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдмрд╛рд░ рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдорд╣рдВрдЧрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, std::string рдкреНрд░рдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ char const * рдорд╛рди рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдРрд╕реА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА std::string рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реЗрдЯ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП, T рд╕реНрдЯреЛрд░ рдХрд┐рдП рдЧрдП рдЯрд╛рдЗрдк T рдореЗрдВ рдЕрдХреНрд╕рд░ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ "рд▓реЛрдб" рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЦреЛрдЬ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред
рдХрд╣рд╛ рдХрд┐ рд╕рднреА рдХреЗ рд╕рд╛рде, libcds рдЙрдиреНрдирдд рд╡рд┐рдзреЗрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдзреЗрдп рд╡рд┐рдХрд▓реНрдк рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрдо (рд╡рд┐рдХрд▓реНрдк cds::opt::less< typename Less > ) рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рддреБрд▓рдирд╛ (рд╡рд┐рдХрд▓реНрдк cds::opt::compare< typename Comparator > ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░рд┐рдЯрд░реНрди рдХреА рддреБрд▓рдирд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╕реЗ рдХрд░реЗрдВ:

рд╡рд┐рдзрд┐ рд╕рдорд╛рд░реЛрд╣ std::string::compare рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред
рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд▓реЗрдЦрди рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИ ( cds::opt::less< typename Less > рд▓рд┐рдП Less cds::opt::less< typename Less > рд╡рд┐рдХрд▓реНрдк рдпрд╛ cds::opt::compare< typename Comparator > рд▓рд┐рдП cds::opt::compare< typename Comparator > рд╡рд┐рдХрд▓реНрдк) рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрд╣рд╛рдБ Comparator рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
 struct string_cmp { int operator()(std::string const& s1, std::string const& s2) const { return s1.compare( s2 ); } int operator()(std::string const& s1, char const* s2) const { return s1.compare( s2 ); } int operator()(char const* s1, std::string const& s2) const { return тАУs2.compare( s1 ); } }; 


allocators


cds::container рд╕реЗ рдХрдВрдЯреЗрдирд░ cds::container рдиреЗрдорд╕реНрдкреЗрд╕ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ cds::opt::allocator - рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ред рдХреБрдЫ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рджреЛ рдЖрд╡рдВрдЯрди рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ - рдПрдХ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП ( cds::opt::node_allocator ), рджреВрд╕рд░рд╛ ( cds::opt::allocator ) - рд╕рд╣рд╛рдпрдХ рдХрдВрдЯреЗрдирд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, std::allocator<int> рдПрдХ std::allocator<int> рд░реВрдк std::allocator<int> рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ std::allocator рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рджреЛ рдЧреБрдгреЛрдВ рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг


рд╕рдорд░реНрдерд┐рдд рд╕рдВрдХрд▓рдХ:


рд╕рдорд░реНрдерд┐рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░:

рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рддреБрдЪреНрдЫ рдирд╣реАрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рд▓рдХреНрд╖реНрдп рд╕рдВрдХрд▓рдХ C ++ 11 atomic рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ libcds рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдореИрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВред

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

рдпрджрд┐ рдЖрдк рдЕрдЪреНрдЫреА рд╕рд▓рд╛рд╣ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣реИ: рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ред рдореИрдВрдиреЗ рдРрд╕реА рд╕рд▓рд╛рд╣ рд╕реЗ рдЕрдореЗрд░рд┐рдХрд╛ рдХреА рдЦреЛрдЬ рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн
[Des09] M.Desnoyers Low-Impact Operating System Tracing PhD Thesis,Chapter 6 ┬лUser-Level Implementations of Read-Copy Update┬╗

[Des11] M.Desnoyers, P.McKenney, A.Stern, M.Dagenias, J.Walpole User-Level Implementations of Read-Copy Update

[Gid05] Anders Gidenstam, Marina Papatriantafilou and Philippas Tsigas Practical and Efficient Lock-Free Garbage Collection Based on Reference Counting

[Gid06] A.Gidenstam Algorithms for synchronization and consistency in concurrent system services , Chapter 5 ┬лLock-Free Memory Reclamation┬╗ Thesis for the degree of Doctor of Philosophy

[Her02] M. Herlihy, V. Luchangco, and M. Moir. The repeat offender problem: A mechanism for supporting dynamic-sized lockfree data structures Technical Report TR-2002-112, Sun Microsystems Laboratories, 2002

[Her05] M. Herlihy, V. Luchangco, P. Martin, and M. Moir. Nonblocking Memory Management Support for Dynamic_Sized Data Structures ACM Transactions on Computer Systems, Vol.23, No.2, May 2005

[Mic02] Maged M.Michael Safe memory reclamation for dynamic lock-free objects using atomic reads and writes

[Mic03] Maged M.Michael Hazard Pointers: Safe memory reclamation for lock-free objects

[Mic04] Andrei Alexandrescy, Maged Michael Lock-free Data Structures with Hazard Pointers


рд▓реЙрдХ-рдлреНрд░реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕
рд╢реБрд░реБрдЖрдд
рдореВрд▓ рдмрд╛рддреЗрдВ:

рдЕрдВрджрд░:

рдмрд╛рд╣рд░ рд╕реЗ:

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


All Articles