VOID
LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
Освобождает критическую секцию,
Листинг 5. Псевдокод
RtlLeaveCriticalSection из ntdll.dll
VOID
RtlLeaveCriticalSectionDbg(LPRTL_CRITICAL_SECTION pcs)
{
if (--pcs->RecursionCount)
::InterlockedDecrement(&pcs->LockCount);
else if
(::InterlockedDecrement(&pcs->LockCount) >= 0)
RtlpUnWaitCriticalSection(pcs);
}
|
Классы-обертки для критических секций
Листинг
6. Код классов CLock, CAutoLock и CScopeLock.
class CLock
{
friend class CScopeLock;
CRITICAL_SECTION m_CS;
public:
void Init() {
::InitializeCriticalSection(&m_CS); }
void Term() {
::DeleteCriticalSection(&m_CS); }
void Lock() {
::EnterCriticalSection(&m_CS); }
BOOL TryLock() { return
::TryEnterCriticalSection(&m_CS); }
void Unlock() {
::LeaveCriticalSection(&m_CS); } Рекомендуем скачать другие рефераты по теме: реферат на экономическую тему, инновационная деятельность.
Предыдущая страница реферата | 2
3
4
5
6
7
8
9
10
11
12 | Следующая страница реферата
|
|