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
projects:hpx:start [2020/05/29 16:30] agaevprojects:hpx:start [2020/06/08 10:30] (current) 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.
 +
 +Это позволит делать улучшенную логику. К примеру, когда, пытаясь удалить какой-то объект, мы должны убедиться, что никто не защищает его потомков(К примеру, удаляя узел дерево, мы должны убедиться, что дети и далее не защищены).
 +
 +====== Is HP obsolete? ======
 +
 +Hazard eras: http://concurrencyfreaks.blogspot.com/2017/05/hazard-eras-non-blocking-memory.html
 +
 +Wait free eras: https://rusnikola.github.io/files/wfe-ppopp20.pdf
projects/hpx/start.1590759034.txt.gz · Last modified: 2020/05/29 16:30 by agaev