Re: A new Critical Section for high contention situations
- From: Keith Moore <keithmo@xxxxxxxxxx>
- Date: Thu, 15 May 2008 08:08:31 -0700
Kürþat wrote:
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);
}
};
There's no contention with this lock because... uhh... there's no synchronization. If enter() is called on an already-locked object, the calling thread will call Sleep(0) *once* then return. Race conditions galore will ensue.
KM
.
- Follow-Ups:
- References:
- Prev by Date: A new Critical Section for high contention situations
- Next by Date: Re: A new Critical Section for high contention situations
- Previous by thread: A new Critical Section for high contention situations
- Next by thread: Re: A new Critical Section for high contention situations
- Index(es):
Relevant Pages
|