この質問はインタビューで尋ねられました。最初の部分は、シングルトンクラスを作成することでした。
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
public:
static Singleton* getSingletonInstance()
{
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
};
getSingletonInstance()
次に、マルチスレッドの状況でこれを処理する方法を尋ねられました。よくわかりませんでしたが、次のように変更しました。
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
static mutex m_;
public:
static Singleton* getSingletonInstance()
{
m_pend();
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
static void releaseSingleton()
{
m_post();
}
};
それから、ミューテックスは必要ですが、ミューテックスの保留と投稿は時間がかかるので効率的ではないと言われました。そして、この状況に対処するためのより良い方法があります。
マルチスレッドの状況でシングルトンクラスを処理するためのより良い、より効率的な方法を知っている人はいますか?