#include <windows.h>
typedef struct _NODE
{
struct _node *next;
int data;
} Node;
typedef struct _LIST
{
Node *head;
Critical_section critical_sec;
} List;
List *createlist ()
{
List *plist = (list*) malloc (sizeof (List));
Plist->head = NULL;
InitializeCriticalSection (&PLIST->CRITICAL_SEC);
return pList;
}
void DeleteList (List *plist)
{
DeleteCriticalSection (&PLIST->CRITICAL_SEC);
Free (pList);
}
void AddHead (List *plist, Node *node)
{
EnterCriticalSection (&PLIST->CRITICAL_SEC);
Node->next = plist->head;
plist->head = node;
LeaveCriticalSection (&PLIST->CRITICAL_SEC);
}
void Insert (List *plist, Node *afternode, node *newnode)
{
EnterCriticalSection (&PLIST->CRITICAL_SEC);
if (Afternode = = NULL)
{
AddHead (PList, NewNode);
}
Else
{
Newnode->next = afternode->next;
Afternode->next = NewNode;
}
LeaveCriticalSection (&PLIST->CRITICAL_SEC);
}
Node *next (List *plist, node *node)
{
Node* Next;
EnterCriticalSection (&PLIST->CRITICAL_SEC);
Next = node->next;
LeaveCriticalSection (&PLIST->CRITICAL_SEC);
return next;
}
Minimum lockout time
In the synchronization mechanism, do not lock a resource for long periods of time.
Warning: do not call sleep () or any wait () API functions in a cirtical section.
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Linked list, with critical section