#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <assert.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
struct own_critical_section
{
long own_lock_count; // count of locked thread, -1 means unlock , other means lock.
HANDLE own_event; // auto-reset
DWORD own_owning_thread_id; // owner thread of lock
long own_recursion_count; // count of recursion
};
void InitialOwnCriticalSection( own_critical_section** own_cs)
{
*own_cs = (own_critical_section*)malloc( sizeof( own_critical_section ) );
(*own_cs)->own_lock_count = -1;
(*own_cs)->own_event = CreateEventW( NULL, FALSE, FALSE, NULL );
(*own_cs)->own_owning_thread_id = 0;
(*own_cs)->own_recursion_count = 0;
}
void DeleteOwnCriticalSection( own_critical_section* own_cs )
{
assert( own_cs != NULL );
CloseHandle( own_cs->own_event );
free( own_cs );
}
void EnterOwnCriticalSection(
[并行编程] 自己实现一个critical section
最新推荐文章于 2016-12-05 16:54:09 发布