Что такое реальная потеря производительности из-за того, что в C ++ 0x все другие потоки должны ожидать в таком случае:
string& program_name() {
static string instance = "Parallel Pi";
return instance;
}
Давайте предположим оптимальный сценарий: Программист был очень осторожен, что даже при 100 потоках только основной поток вызывает функцию program_name
, все остальные 99 рабочие потоки заняты выполнением полезных вещей, которые не связаны свызывая эту «критическую» функцию.
Я цитирую новый C ++ 0x-Std § 6.7. (4) stmt.decl
...such объект инициализируется при первом прохождении управления через его объявление ... Если управление вводит объявление одновременно с инициализацией объекта, параллельное выполнение должно ожидать завершения инициализации ...
Что такое реалистичные накладные расходы, которые необходимы для использования реального компилятора, чтобы гарантировать, что статическая инициализация выполняется в соответствии с требованиями стандарта.
- Требуется ли блокировка / мьютекс?Я предполагаю, что они дорогие, даже когда они на самом деле не нужны?
- Если они дорогие, будет ли это сделано с помощью менее дорогих механизмов?
edit: добавлено string
...