链表,配合critical section

#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函数。

时间: 2024-11-05 21:17:31

链表,配合critical section的相关文章

Critical Section Object

Critical Section  Object  From MSDN Critical Section Objects A critical section object provides synchronization similar to that provided by a mutex object, except that a critical section can be used only by the threads of a single process. Event, mut

spinlock,mutex,semaphore,critical section的作用与差别

某年深信服的笔试题,考的就是多线程的同步.简单的解释下方便记忆: 1.spinlock:自旋锁.是专为防止多处理器并发而引入的一种锁. 2.mutex:相互排斥量. 仅仅有拥有相互排斥对象的线程才有訪问公共资源的权限.保证了资源不会同一时候被多个线程訪问. 3.semaphore:信号量.同意多个线程同一时候訪问资源,限制訪问资源的最大线程数. 4.critical section:临界区. 随意时刻仅仅同意一个线程对共享资源进行訪问.

windows下使用Critical Section和Mutex实现线程同步实例

利用critical section 和 Mutex两种不同的线程同步的方法实现生产者消费者问题.生产者线程要能够对一个计数器进行增的操作,并且将其输出在控制台上,消费者线程能够对这个计数器进行减的操作,并将其输出在控制台上.两种线程都共享一个计数器. 其中增.减计数器的数我设置为1-6随机. 测试两种方法的对比,用网上整理出的一张表如下 1.使用CriticalSection 方法时,有一个临界区cs 在将临界区传递给 InitializeCriticalSection 时(或者更准确地说,是

spinlock,mutex,semaphore,critical section的作用与区别

某年深信服的笔试题,考的就是多线程的同步,简单的解释下方便记忆: 1.spinlock:自旋锁.是专为防止多处理器并发而引入的一种锁. 2.mutex:互斥量.只有拥有互斥对象的线程才有访问公共资源的权限.保证了资源不会同时被多个线程访问. 3.semaphore:信号量.允许多个线程同时访问资源,限制访问资源的最大线程数. 4.critical section:临界区.任意时刻只允许一个线程对共享资源进行访问.

critical section的用法

critical section Critical Section: 不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问.每个进程中访问临界资源的那段代码称为临界区(Critical Section). 每个进程中访问临界资源的那段程序称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源).每次只准许一个进程进入临界区,进入后不允许其他进程进入.不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问. 多个进程中涉及到同一个临

spinlock,mutex,semaphore,critical section

critical section(临界区) 在任意时刻只允许一个线程对共享资源进行访问.如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开.临界区包含两个操作原语: EnterCriticalSection() 进入临界区 LeaveCriticalSection() 离开临界区. 优点:速度快.因为Critical Section不是内核对象,函数EnterCriticalSection()和LeaveCritica

General Critical Section Problem

Once I talked about Process Synchronization, and provided a demo program of Search/Insert/Delete Problem. As a matter of fact, such Critical Section Problems have a general form: given num different types of threads, as well as all pairs of i and j s

【JMeter_09】JMeter逻辑控制器__临界部分控制器&lt;Critical Section Controller&gt;

临界部分控制器<Critical Section Controller> 业务逻辑: 根据锁名来控制并发,同一个锁名之下,在同一时间点只能存在一个运行中,适用于控制并发的场景 锁名类型: 锁名为空,认为每个锁为不同的锁 锁名相同,多个锁认为是同一个锁,同一个时间点只能存在一个运行中 锁名为变量,根据变量值来判断是不是属于同一个锁,变量值为相同时,则认为是同一个锁 演示脚本: Demo_临界部分控制器 原文地址:https://www.cnblogs.com/fcholy/p/10902051.

[并发并行]_[线程同步]_[pthread和win32的临界区(Critical Section)比较]

场景: 1.  在多线程程序里,临界区是最常见的同步访问共享资源的最简单的解决方案. 2. pthread是跨平台的线程模型,那么它和本地的线程模型的临界区编程有什么区别呢? 临界区: 临界区是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权.这是让若干代码能够"以原子操作方式"来使用资源的一种方法. 所谓原子(atomic)操作方式,是指这段代码知道没有别的线程要访问这个资源. 说明: 1.  MacOSX,Windows有自己的线程模型, pthread可以说是跨平台