SrinivasanMK
September 19th, 2002, 06:52 AM
Hi,
Pl. refer the following sample code and let me know whether the code is thread safe in accessing the static variable.
I already test run the code for more than 3 days continuously but the application didn't crash. I want to know abt the use of static variable in Mulithreaded applications, as one of my application is using the same logic.
------ Classone.cpp -------
CClassOne::CClassOne()
{
m_iCount =0;
}
CClassOne::~CClassOne()
{
}
void CClassOne::RunClassOne()
{
if (s_iloopCount >=100)
m_icount =0;
else
m_icount++;
}
void CClassOne::UpdateStaticValue()
{
s_iloopCount = s_iloopCount +2;
}
------ Classone.h -------
static int s_iloopCount =0;
class CClassOne
{
public:
CClassOne();
virtual ~CClassOne();
void RunClassOne();
void UpdateSaticValue();
protected:
int m_iCount;
};
------- main --------
DWORD WINAPI CThreads::ThreadRoutine1(LPVOID lpv)
{
DWORD dwTimeInterval = 12 * 1000;
CClassOne *pClassOne =NULL;
pClassOne = new CClassOne;
do
{
returnvalue=WaitForSingleObject(hEvent,dwInterval);
if (returnvalue==WAIT_OBJECT_0)
break;
pClassOne->RunClassOne();
}while(true);
if (pClassOne !=NULL)
delete pClassOne ;
return 0;
}
DWORD WINAPI CThreads::ThreadRoutine2(LPVOID lpv)
{
DWORD dwInterval = 15 * 1000;
CClassOne *pClassOne =NULL;
pClassOne = new CClassOne;
do
{
returnvalue=WaitForSingleObject(hEvent,dwInterval);
if (returnvalue==WAIT_OBJECT_0)
break;
pClassOne->UpdateStaticValue();
}while(true);
if (pClassOne !=NULL)
delete pClassOne ;
return 0;
}
int main(int argc, char* argv[])
{
DWORD dwThID = 0;
HANDLE hThread1, hThread2;
HANDLE hEvent;
hEvent = CreateEvent(NULL,false,false,NULL);
hThread1 = ::CreateThread(NULL, 0, ThreadRoutine1, NULL, 0, &dwThID);
hThread2 = ::CreateThread(NULL, 0, ThreadRoutine2, NULL, 0, &dwThID);
.....
do
{
Sleep(60000);
} while (true);
}
Pl. refer the following sample code and let me know whether the code is thread safe in accessing the static variable.
I already test run the code for more than 3 days continuously but the application didn't crash. I want to know abt the use of static variable in Mulithreaded applications, as one of my application is using the same logic.
------ Classone.cpp -------
CClassOne::CClassOne()
{
m_iCount =0;
}
CClassOne::~CClassOne()
{
}
void CClassOne::RunClassOne()
{
if (s_iloopCount >=100)
m_icount =0;
else
m_icount++;
}
void CClassOne::UpdateStaticValue()
{
s_iloopCount = s_iloopCount +2;
}
------ Classone.h -------
static int s_iloopCount =0;
class CClassOne
{
public:
CClassOne();
virtual ~CClassOne();
void RunClassOne();
void UpdateSaticValue();
protected:
int m_iCount;
};
------- main --------
DWORD WINAPI CThreads::ThreadRoutine1(LPVOID lpv)
{
DWORD dwTimeInterval = 12 * 1000;
CClassOne *pClassOne =NULL;
pClassOne = new CClassOne;
do
{
returnvalue=WaitForSingleObject(hEvent,dwInterval);
if (returnvalue==WAIT_OBJECT_0)
break;
pClassOne->RunClassOne();
}while(true);
if (pClassOne !=NULL)
delete pClassOne ;
return 0;
}
DWORD WINAPI CThreads::ThreadRoutine2(LPVOID lpv)
{
DWORD dwInterval = 15 * 1000;
CClassOne *pClassOne =NULL;
pClassOne = new CClassOne;
do
{
returnvalue=WaitForSingleObject(hEvent,dwInterval);
if (returnvalue==WAIT_OBJECT_0)
break;
pClassOne->UpdateStaticValue();
}while(true);
if (pClassOne !=NULL)
delete pClassOne ;
return 0;
}
int main(int argc, char* argv[])
{
DWORD dwThID = 0;
HANDLE hThread1, hThread2;
HANDLE hEvent;
hEvent = CreateEvent(NULL,false,false,NULL);
hThread1 = ::CreateThread(NULL, 0, ThreadRoutine1, NULL, 0, &dwThID);
hThread2 = ::CreateThread(NULL, 0, ThreadRoutine2, NULL, 0, &dwThID);
.....
do
{
Sleep(60000);
} while (true);
}