标签:
原作者:chexlong 原文地址:http://blog.csdn.net/chexlong/article/details/7051193
本文目的:用C++和Windows的互斥对象(Mutex)来实现线程同步锁。
准备知识:1,内核对象互斥体(Mutex)的工作机理,WaitForSingleObject函数的用法,这些可以从MSDN获取详情; 2,当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。
下边是我参考开源项目C++ Sockets的代码,写的线程锁类
Lock.h
Lock.cpp
下边是测试代码
用VC2005编译,启动程序,下边是截图
如果将测线程函数中的代码注视掉,重新编译代码,运行
则结果见下图
由此可见,通过使用Mutex的封装类,即可达到多线程同步的目的。因Mutex属于内核对象,所以在进行多线程同步时速度会比较慢,但是用互斥对象可以在不同进程的多个线程之间进行同步。
在实际应用中,我们通常还会用到临界区,也有叫做关键代码段的CRITICAL_SECTION,在下篇博客中,我将会把CRITICAL_SECTION锁添加进来,并且对Mutex和CRITICAL_SECTION的性能做以比较。
标签:
原文地址:http://www.cnblogs.com/gkwang/p/4482933.html