if (std::atomic_fetch_sub(&m_task_count, 1) == 1)
Я пользуюсь атомарным инк(дек)рементом уже не один десяток лет. Не верите - ну страхуйтесь
Вспомнилось неплохое объяснение типа:
Атомарная арифметика оперирует/возвращает "моментальные фотографии". Т.е. то что "изображено на фото" - правда, реальный факт который "имел место". НО когда мы получили это "фото" мы должны иметь ввиду что это "уже в прошлом" и могли произойти др события. На первый взгляд в этом нет смысла - ведь возвращенному значению все равно "нельзя верить", оно могло уже стать иным. Но "факт" можно использовать как в примере выше. И факты эти случаются строго один за одним (за счет отой "ordered memory semantic"), а вот какая нитка получит какое фото - уже как фишка ляжет.
Ну даже тут вариант с футурами проходит
Да какой там "вариант", просто "так заработало"
Зачем нужен контейнер если можно обойтись счетчиком?
- А почему Вы ищете только под фонарем?
- Потому что там светло
Да, я согласен, что если вот так, как в предложенных тестах, кидать "мелкие" задачи, то мы неменуемо свалимся в bottlen neck эффект (эффукт узкого горла - пробка)
Дело не только в "мелких задачах". Вы набиваете пул по самые "не балУйся" - но это "хороший" случай, а в жизни часто не так - напр нужно нужно сначала посчитать всего с десяток задач, "осмотреться", потом еще десяток-другой и.т.д. (в тестах что я выкладывал это есть). Здесь постоянное усыпление/пробуждение ниток обходится дорого.
Т.е. для каждой конкретной задачи, должен ставится вопрос: а нужно ли её распараллеливать, и если нужно, то как наиболее эффективно..
Да-да-да
В жизни происходит примерно так
- во, тут превью совсем дохнет, 2-3 fps. Ладно, профайлим - ага, жрется на пересчете нормалей. Отключаем это место - во, 70 fps. На GPU не перенести. А "задача" здесь - получить 2 вектора вычитанием и записать в рез-т векторное произведение. До того atan2 там ой далеко. Ну и понеслась...
Вообще, в идеале, хотелось бы реализовать идею cpp-taskflow
https://github.com/cpp-taskflow/cpp-taskflowПонравилась мне она очень
Так, чисто для удовлетворения своих эстетических чувств) К тому же я могу себе это позволить)
А конкретнее? Те картинки мне, правду сказать, и нафиг не нужны. А если что интересное - поддержу обсуждение, только тему новую создайте