Почему очередь без блокировки использует тройной подсчет вместо двойного подсчета, используемого в стеке без блокировки?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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