线程锁笔记

来源:互联网 发布:主机屋数据库地址 编辑:程序博客网 时间:2024/06/05 07:08

前言:

使用多线程时,必须学会对临界区加锁。所谓临界区是一种轻量级的机制,在某一时间内只允许一个线程执行特定的代码段。这样的话,在使用多线程的时候,必须提出一种保护机制来控制临界区的访问,这种保护机制就是锁。

C++对临界区加锁方法:

CRITICAL_SECTION g_cs; //临界区声明

InitializeCriticalSection(&g_cs); //初始化锁

EnterCriticalSection(&g_cs);//进入临界区域

{

 临界区访问代码段;

.......

}

LeaveCriticalSection(&g_cs);//离开临界区

DeleteCriticalSection(&g_cs); //删除临界区

其它知识:

线程进入临界区的调度原则是什么?

①如果有若干线程要求进入空闲的临界区,一次仅允许一个线程进入。

②任何时候,处于临界区内的线程不可多于一个。如已有线程进入自己的临界区,则其它所有试图进入临界区的线程必须等待。

③进入临界区的线程要在有限时间内退出,以便其它线程能及时进入自己的临界区。

④如果线程不能进入自己的临界区,则应让出CPU,避免线程出现“忙等”现象。

如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。




0 0
原创粉丝点击