Здравствуйте, Аноним, Вы писали:
А>Цитата:
А>"что сразу бросается в глаза — если у тебя на этом куске повиснет поток с высоким приоритетом, а синглтон будет создаваться потоком с низким — будут страшные тормоза."
А>Спасибо!
А>Если есть у вас какиенить идеи как это можно лучше сделать/обойти — буду благодарен.
Есть DCSI — double-checked serialized initialization, он же DCL (double-check locking) и DCI (double-check initialization).
Это когда, пока один инициализирует объект, остальные ждут на мьютексе.
Есть DCSI-TSD — DCSI with thread-specific data
То же, но с копией указателя на объект в TSD.
Есть DCCI (double-checked concurrent initialization).
Это когда инициализация объекта идемпотентная. Т.е. все потоки, которые увидели неинициализированный объект, начинают его создавать. Далее кто-то один атомарно подменяет глобальный указатель на свой, остальные рушат свои объекты.
Данная реализация — DCSI. DCCI может быть реализован полностью неблокирующим (гарантия wait-free:
http://www.rsdn.ru/Forum/?mid=2930849Автор: remark
Дата: 27.04.08
). Соотв. не подвержен таким вещам как priority inversion.