Летучий член Синглтона?

У меня есть движок состояний, который использует шаблон проектирования программного обеспечения Singleton. Доступ к движку состояний возможен из нескольких потоков. Объект инициализируется из основного потока при запуске программы и не предназначен для отложенной инициализации.

Мой вопрос заключается в том, должен ли я сделать публичные статические члены нестабильными, как это:

class CStateEngine final
{
private:
/* Contains the Singleton object */
static CStateEngine* instance;
protected:
CStateEngine();
public:
static CStateEngine* Instance() volatile;   // Returns the Singleton instance
static void DeleteInstance() volatile;  // Deletes the Singleton instance
}

0

Решение

volatile Ключевое слово в C ++ НЕ такое же, как в других языках. В C ++ это означает, что компилятор будет следить за тем, чтобы значение всегда заново считывалось из памяти и никогда не использовалось кэшированное значение.

Он использует встроенный мир и другие места. Если вы хотите иметь всегда актуальный вид определенной переменной, вы бы отметили ее как volatile,

Однако это не имеет ничего общего с многопоточностью.

Вы не должны использовать одноэлементную среду в многопоточной среде, потому что это будет причиной для конфликта, поскольку несколько потоков пытаются получить доступ к вашему объекту. Это приведет к отставанию ваших программ и, в первую очередь, к поражению при использовании потоков.

Вы должны передавать объекты вокруг, и вы должны иметь возможность создавать новые по мере необходимости.

Если вы не можете этого сделать, проверьте свой дизайн.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]