I have used 2 interlocked vars and a semaphore. Below is a schematic of the code. In this case the Get Thread has a very high access on the resource at 2 - 3 mil. of gets/sec towards 20 - 50 of add and del /sec If you have a better idea please tell me. Thank you. Get() { InterlockedIncrement(&_read); while(_write > 0) Sleep(0); CList::Get(); InterlockedDecrement(&_read); } Add() { while(_read > 0) Sleep(0); InterlockedIncrement(&_write); WaitForSingleObject(_sem,INFINITE); CList::Add(); ReleaseSemaphore(_sem,1,NULL); InterlockedDecrement(&_write); } Delete() { while(_read > 0) Sleep(0); InterlockedIncrement(&_write); WaitForSingleObject(_sem,INFINITE); CList::Add(); ReleaseSemaphore(_sem,1,NULL); InterlockedDecrement(&_write); }