Я написал класс, отвечающий за отслеживание сообщений об ошибках, который использует статический std :: list для отслеживания сообщений.
он не объявлен как статический -что это такое?
РЕДАКТИРОВАТЬ: увидел, что это была опечатка, и что он должен быть объявлен статическим.однако предложение в конце ответа может помочь вам достичь максимальной скорости без ошибок в потоке.
Честно говоря, меня не очень беспокоит проблема параллелизма, так как они влияют на журнал ошибок.- во время многопоточной части прогона, если есть ошибка, достойная записи в журнал, это почти наверняка фатальная ошибка - но меня беспокоят проблемы с производительностью.
Ваши проблемыв обратном направлении - нет причин вводить ошибку, которую трудно отследить и которую можно легко избежать.
В: если она почти наверняка фатальна и, таким образом (надеюсь) довольно редка, сколько будет стоить блокировка при регулярном выполнении?
A: только немного памяти (для блокировки).Вы не будете часто писать в него.
В: почему эти затраты будут значительными на данном этапе выполнения?
A: программа, вероятно, столкнулась с чем-то фатальным
Q: почему правильно написанная параллельная программа считается слишком медленной или даже медленнее однопоточной реализации на типичном оборудовании?
A: это не так.просто напишите свою программу для нынешних и будущих машин.Хорошо, в некоторых случаях это не очень хорошо, но я подозреваю, что это не так, поскольку вы пишете другие части программы для одновременного выполнения.
вы должны написать свою реализацию для параллелизма, если производительностьздесь действительно важно.
Было бы лучше сделать паттерн ErrorLog Singleton или это для всех практических целей одно и то же?
нет.создайте несколько экземпляров, которые содержат свои собственные сообщения, если вы предпочитаете классифицировать сообщения.несколько экземпляров уменьшат конкуренцию за типы регистраторов, если: 1) важна скорость; 2) у вас действительно много сообщений для регистрации
с использованием нескольких регистраторов; ваш абонент не будет ждать, чтобы получить блокировку так часто,если вам нужно написать много сообщений, и сообщения выталкиваются из нескольких потоков.
в конце, соберите все сообщения со всех регистраторов и запишите их на диск.таким образом, разные регистраторы (в разных контекстах) могут выводить свои сообщения по категориям (экземплярам) или по времени (если вы предпочитаете).
, если вы знаете, что это фатально, затем пересмотреть немедленную запись (как предлагает 0xC0DEFACE).