Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


projects:hpx:start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
projects:hpx:start [2020/05/29 16:30] agaevprojects:hpx:start [2020/06/01 18:04] agaev
Line 62: Line 62:
  
 Дополнительные вещи, не из стандарта: Дополнительные вещи, не из стандарта:
 +
 hazptr_array<N> для N hazptr-ов сразу, быстрее. hazptr_array<N> для N hazptr-ов сразу, быстрее.
 +
 hazptr_local<N> немного быстрее, но обязывает иметь ровно 1 активный hazptr_* на поток hazptr_local<N> немного быстрее, но обязывает иметь ровно 1 активный hazptr_* на поток
  
Line 109: Line 111:
 ====== Аргумент против standard proposal(Hooks) ====== ====== Аргумент против standard proposal(Hooks) ======
 [[https://www.boost.org/doc/libs/1_54_0/doc/html/intrusive/usage.html|Boost.Intrusive]] [[https://www.boost.org/doc/libs/1_54_0/doc/html/intrusive/usage.html|Boost.Intrusive]]
 +
 В стандарте сейчас используется что-то похожее на base_hook В стандарте сейчас используется что-то похожее на base_hook
 +
 В Boost.Intrusive говорится(И это и есть аргумент): В Boost.Intrusive говорится(И это и есть аргумент):
  Sometimes an 'is-a' relationship between list hooks and the list value types is not desirable.  Sometimes an 'is-a' relationship between list hooks and the list value types is not desirable.
Line 169: Line 173:
  
 В массиве HP в libcds хранится каст к void*. В proposal'е каст к hazptr_obj_base*. В массиве HP в libcds хранится каст к void*. В proposal'е каст к hazptr_obj_base*.
 +
 Моя идея в том, чтобы как и в Boost.Intrusive, добавить к hazptr_domain или hazard_pointer::protect шаблонный параметр, указывающий на то, как получать hazptr_ptr из нашего класса Моя идея в том, чтобы как и в Boost.Intrusive, добавить к hazptr_domain или hazard_pointer::protect шаблонный параметр, указывающий на то, как получать hazptr_ptr из нашего класса
  
Line 177: Line 182:
 Мои варианты: Множественное наследование от двух типов, каждый из которых наследуется от hazptr_obj_base Мои варианты: Множественное наследование от двух типов, каждый из которых наследуется от hazptr_obj_base
 Function hook решает эту проблему. Function hook решает эту проблему.
 +
 +===== Альтернативные варианты ====
 +
 +Наша задача, по сути, научиться определять, защищен ли в текущий момент такой вот указатель(Тип его не знаем(void*), либо RTTI). То есть необходимо сравнить его с другими Hazard Pointers, и определить, равняются ли они, логически.
 +
 +В protect мы кладём какой-то указатель, в retire программист должен дать какой-то isDefendedBy(HP*), с помощью которого можно будет определить, защищен ли сейчас объект, который мы хотим удалить.
 +
 +Сейчас это isDefendedBy == isSame для libcds, и static_cast<hazptr_obj_base>::isSame() для folly и prorosals.
 +
 +Это позволит делать улучшенную логику. К примеру, когда, пытаясь удалить какой-то объект, мы должны убедиться, что никто не защищает его потомков(К примеру, удаляя узел дерево, мы должны убедиться, что дети и далее не защищены).
projects/hpx/start.txt · Last modified: 2020/06/08 10:30 by agaev