您的位置:首页 > 其它

链表,配合critical section

2015-07-24 09:29 302 查看
#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;

}








最小锁定时间

同步机制中,不要长时间锁住一份资源。

警告:千万不要在一个cirtical section 之中调用Sleep() 或任何Wait() API函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: