LINUX.ORG.RU

История изменений

Исправление khrundel, (текущая версия) :

Знаешь, беру свои слова обратно. Даже в случае таймеров как ты описал, решение на списках хуже массивного, причём как по производительности, так и по удобству.

В качестве айдишников берём монотонно растущие целые числа. Удаление из начала тривиально, просто проверять статус. Для очереди используем, внезапно, очередь. Отмена через:

if (timers_deque.size() > 0)
{
    int64_t index = timer_id - timers_deque[0].timer_id;
    if (index >= 0)
        deque[index].canceled = true;
}

И никакой дрочки счётчиков ссылок, никаких ненужных аллокаций.

Исходная версия khrundel, :

Знаешь, беру свои слова обратно. Даже в случае таймеров как ты описал, решение на списках хуже массивного, причём как по производительности, так и по удобству.

В качестве айдишников берём монотонно растущие целые числа. Удаление из начала тривиально, просто проверять статус. Для очереди используем, внезапно, очередь. Отмена через:

if (timers_deque.size() > 0)
{
    int64_t index = timer_id - timers_deque[0].timer_id;
    if (index >= 0)
        deque[index].canceled = true;
}