Categories: Quant Development

A C++ multi thread safe singleton example with source code has been posted

Lock.h

//Example from http://www.relisoft.com/Win32/active.html
#if !defined _LOCK_H_
#define _LOCK_H_

#include “Mutex.h”

class Lock
{
public:
// Acquire the state of the semaphore
Lock ( Mutex & mutex )
: _mutex(mutex)
{
_mutex.Acquire();
}
// Release the state of the semaphore
~Lock ()
{
_mutex.Release();
}
private:
Mutex & _mutex;
};

#endif

Mutex.h

//Example from http://www.relisoft.com/Win32/active.html
#if !defined _MUTEX_H_
#define _MUTEX_H_

class Mutex
{
friend class Lock;
public:
Mutex () { InitializeCriticalSection (& _critSection); }
~Mutex () { DeleteCriticalSection (& _critSection); }
private:
void Acquire ()
{
EnterCriticalSection (& _critSection);
}
void Release ()
{
LeaveCriticalSection (& _critSection);
}

CRITICAL_SECTION _critSection;
};

#endif

Singleton.h

#include “Lock.h”
#include “Mutex.h”

class aSingletonClass
{
public:
//method to get Instance of class
static aSingletonClass *getInstance( void )
{
//Note that the class is only created when this method is called first time
if(!instance_)
instance_ = new aSingletonClass;
return instance_;
}
//method to delete Instance of class
static void deleteInstance( void )
{
if(instance_)
delete instance_;
instance_ = NULL; //important as this can create dead reference problems
}
void printSomething(char *name, int count)
{
Lock guard(mutex_);
std::cout << name << " loop " << count << std::endl; } private: //variable to store the instance of singleton static aSingletonClass *instance_; //default constructor should be private to prevent instantiation aSingletonClass() {}; //destructor should be made private so no one can delete this accidently ~aSingletonClass() {}; //We also need to prevent copy being created of the object aSingletonClass(const aSingletonClass&); Mutex mutex_; }; Thread.cpp //Program tested on Microsoft Visual Studio 2008 - Zahid Ghadialy //This shows example of Multithreading, thread sync, Mutex #include
#include #include
#include “Singleton.h”

using namespace std;

aSingletonClass* aSingletonClass::instance_ = NULL;

void Func1(void *);
void Func2(void *);

int main()
{
HANDLE hThreads[2];

aSingletonClass *someVar = NULL;
//Create Instance
someVar = aSingletonClass::getInstance();

//Create two threads and start them
hThreads[0] = (HANDLE)_beginthread(Func1, 0, NULL);
hThreads[1] = (HANDLE)_beginthread(Func2, 0, NULL);

//Makes sure that both the threads have finished before going further
WaitForMultipleObjects(2, hThreads, TRUE, INFINITE);

cout << "Main exit" << endl; return 0; } void Func1(void *P) { int Count; for (Count = 1; Count < 11; Count++) { aSingletonClass::getInstance()->printSomething(“Func1”, Count);
}
return;
}

void Func2(void *P)
{
int Count;

for (Count = 10; Count > 0; Count–)
{
aSingletonClass::getInstance()->printSomething(“Func2”, Count);
}
return;
}

NOTE I now post my TRADING ALERTS into my personal FACEBOOK ACCOUNT and TWITTER. Don't worry as I don't post stupid cat videos or what I eat!
caustic

Hi i there My name is Bryan Downing. I am part of a company called QuantLabs.Net This is specifically a company with a high profile blog about technology, trading, financial, investment, quant, etc. It posts things on how to do job interviews with large companies like Morgan Stanley, Bloomberg, Citibank, and IBM. It also posts different unique tips and tricks on Java, C++, or C programming. It posts about different techniques in learning about Matlab and building models or strategies. There is a lot here if you are into venturing into the financial world like quant or technical analysis. It also discusses the future generation of trading and programming Specialties: C++, Java, C#, Matlab, quant, models, strategies, technical analysis, linux, windows P.S. I have been known to be the worst typist. Do not be offended by it as I like to bang stuff out and put priorty of what I do over typing. Maybe one day I can get a full time copy editor to help out. Do note I prefer videos as they are much easier to produce so check out my many video at youtube.com/quantlabs

Recent Posts

Dive into kdb+ and q: A Guide to Learning Resources

But where do you begin your kdb+ and q journey? Don't worry, aspiring q programmers!…

13 hours ago

High-Frequency Trading Meets High-Performance Computing: Building Your Dream Career

The world of high-frequency trading (HFT) thrives on speed and precision, and high-performance computing (HPC)…

1 day ago

Python Powers Algorithmic Trading: Mastering the Market with Code

This article explores the exciting opportunities for Python which powers algorithmic trading, equipping you with…

1 day ago

Allure and Limitations of Open-Source Algorithmic Trading Systems

Here, we delve into the potential limitations of relying solely on open-source projects for youropen-source…

1 day ago

Demystifying Latency: A C++ Deep Dive into High-Frequency Trading

Today, we join Brian, host of quantlabs.net, as he explores the intricate relationship between C++deep…

2 days ago

High-Frequency Trading: Unveiling the Market Maker’s Dance

Welcome to the fast-paced realm of high-frequency trading (HFT), where milliseconds reign supreme and market…

2 days ago