Почему очередь без блокировки использует тройной подсчет вместо двойного подсчета, используемого в стеке без блокировки?C++

Программы на C++. Форум разработчиков
Anonymous
Почему очередь без блокировки использует тройной подсчет вместо двойного подсчета, используемого в стеке без блокировки?

Сообщение Anonymous »

В параллелизме C ++ в действии очередь без блокировки реализована с тройным подсчетом. Основная структура его узлов заключается в следующем: < /p>

Код: Выделить всё

template  struct node;
template 
struct counted_node {
node *data;
long external_count;
};
template 
struct node {
struct compressed_counter {
unsigned long internal_counter : 62;
unsigned long head_tail_counter : 2;
};
std::atomic next;
std::atomic internal_counter;
std::atomic value;
};
< /code>
Структура двойного подсчета разработана как < /p>
template  struct node;
template 
struct counted_node {
node *data;
long external_count;
};
template 
struct node {
counted_node next;
std::atomic internal_count;
std::shared_ptr value;
};
Зачем положить голову / счетчик внутри данных узла вместо непосредственного хранения его в External_count ? Однако в коде, показанном в книге, хвост только загружается и сравнивается; Я не вижу никакой фактической модификации данных узла хвоста (включая мелиорацию).

Подробнее здесь: https://stackoverflow.com/questions/797 ... nting-used

Вернуться в «C++»