программистское
Jan. 25th, 2006 01:30 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
попал на забавный клин в синглетоне: функция getInstance() может быть вызвана из-под конструктора, вызваного опять же из функции getInstance() для того же самого класса. Не обязательно напрямую, разумеется, а через цепочку вызовов. В моём случае всё было еще сложнее: getInstance() обратилась к кому-то там через COM, и пока вызов отрабатывался, в тот же тред пришел другой COM-вызов (вот не понимаю, зачем микрософт такое разрешил), приведший к новому вызову getInstance().
Иными словами
1. функция getInstance для класса T вызвается в самый первый раз
2. вызывается конструктор класса Т
3. конструктор вызывает еще что-то-там
4. что-то-там вызывает getInstance для класса Т
Вроде бы, ни в одной книжной имплементации синглетона я не видел защиты от подобного сценария, или упоминания о нём.
Иными словами
1. функция getInstance для класса T вызвается в самый первый раз
2. вызывается конструктор класса Т
3. конструктор вызывает еще что-то-там
4. что-то-там вызывает getInstance для класса Т
Вроде бы, ни в одной книжной имплементации синглетона я не видел защиты от подобного сценария, или упоминания о нём.
no subject
Date: 2006-01-25 11:40 am (UTC)no subject
Date: 2006-01-25 11:44 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2006-01-25 12:50 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: