I am trying to execute some code(c++) on windows and cygwin(linux) and found there is a difference in execution of singleton class. Since my code has dependency with other singleton class, it functionally operates correctly with linux and not with windows, sometimes viceversa.
See the sequence below:
Posix:
Singleton : UniqueIdService
Singleton : MonitorServer
MonitorServer : Waiting for Monitor Client connection....
Singleton : ManagerServer
ManagerServer : Waiting for Tester Client connection....
Singleton : EventAggregator
Singleton : DataAggregator
Singleton : CounterService
Singleton : AppletManager
Singleton : SubService
Singleton : PubService
main
Windows:
Singleton : AppletManager
Singleton : PubService
Singleton : SubService
Singleton : CounterService
Singleton : DataAggregator
Singleton : EventAggregator
Singleton : ManagerServer
ManagerServer : Waiting for Tester Client connection....
Singleton : MonitorServer
MonitorServer : Waiting for Monitor Client connection....
Singleton : UniqueIdService
main
Is there a way or mechanism to sequence these execution across platform?
Code example. AppletManger.cpp:
AppletManager *AppletManager::instance = new AppletManager();
AppletManager::AppletManager(void)
{
printf("\n Singleton : AppletManager");
}
AppletManager.h
class AppletManager
{
public:
static AppletManager *getInstance(){
assert(instance != NULL);
return instance;
}
~AppletManager();
private:
AppletManager();
static AppletManager *instance;
};
UniqueIdService.cpp:
UniqueIdService *UniqueIdService::instance = new UniqueIdService();
UniqueIdService::UniqueIdService()
{
printf("\n Singleton : UniqueIdService");
uniqueId = 0;
appletId = 0;
funcblocId = 0;
eventId = 0;
}
UniqueIdService.h:
class UniqueIdService
{
public:
static UniqueIdService *getInstance(){
assert(instance != NULL);
return instance;
}
~UniqueIdService();
private:
UniqueIdService();
static UniqueIdService *instance;
};