A new Critical Section for high contention situations
- From: "Kürşat" <xx@xxxxxx>
- Date: Thu, 15 May 2008 16:43:27 +0300
Hi,
"CRITICAL_SECTION"s are ideal inter-thread syncronization solutions for
low-contention situations but as the contention increases the performance
falls down accordingly because of kernel transition. So developed a simple
syncronization object which always remains in user mode (at least I think
so). I tested both the CRITICAL_SECTION and my object with a high contention
schenario and I see my object gives ~%45 better results (with a dual core
CPU). Wow, cool! What do you think about my implementation? Is there any
obstacle to use it in a commercial software?
(I am not sure about originality of the implementation, it may be
implemented many times by many developers.)
Thanks in advance.
/////////////////////////////////////////////////////////////////////
#define OWNED 1
#define NOT_OWNED 0
class CRITICAL
{
private:
int m_nLock;
public:
CRITICAL () : m_nLock (NOT_OWNED) {}
void enter ()
{
if (InterlockedCompareExchange ((LONG * ) &m_nLock, OWNED,
NOT_OWNED) == OWNED)
{
Sleep (0);
}
}
void leave ()
{
InterlockedExchange ((LONG * ) &m_nLock, NOT_OWNED);
}
};
.
- Follow-Ups:
- Re: A new Critical Section for high contention situations
- From: Ondrej Spanel
- Re: A new Critical Section for high contention situations
- From: Alexander Grigoriev
- Re: A new Critical Section for high contention situations
- From: Keith Moore
- Re: A new Critical Section for high contention situations
- Prev by Date: RE: FIFO lost on Critical Section
- Next by Date: Re: A new Critical Section for high contention situations
- Previous by thread: Launch an executable as a user from an administrative account
- Next by thread: Re: A new Critical Section for high contention situations
- Index(es):
Relevant Pages
|