随笔分类 -  Windows编程

摘要:1:用Interlocked系列函数实现线程同步;2:用CRITICAL_SECTION及其系列函数实现线程同步;3:用RTL_SRWLOCK及其系列函数实现线程同步;4:用事件内核对象实现线程同步;5:用信号量内核对象实现线程同步;1:用Interlocked系列函数实现线程同步实例如下://旋转锁#include using namespace std; #include #include const int threadNum=10;HANDLE hThread[threadNum];volatile unsigned int ISOK=0;unsigned int _stdcal... 阅读全文
posted @ 2013-03-31 14:46 啊汉 阅读(24420) 评论(1) 推荐(3) 编辑
摘要:系统中的所有线程都要访问系统资源,一个线程霸占某个资源,其他需要该资源的线程就不能完成自己的任务;另外如一个线程在读取某块内存中的数据,而另一个线程又正在修改这块内存的值,这同样不是我们想要的,所以线程之间必须要有一套自己的规则,不然就凌乱了。线程之间需要通信,如A线程霸占某个B线程需要的资源X,在A占用期间,B线程只能等待,或处于挂起状态,当A线程用完资源X后,系统会告诉线程B,资源X可以用了,或是将处于挂起状态的线程B唤醒,然后线程B就获得对资源X的控制权,其他想用资源X的线程就得经历B刚才的遭遇。当多个线程同时需要某个资源时必须遵守下面两个规则:1:多个线程“同时”访问资源,不能破坏资源 阅读全文
posted @ 2012-12-30 22:12 啊汉 阅读(6978) 评论(0) 推荐(1) 编辑
摘要:线程由两部分组成:线程内核对象和线程栈。关于内核对象请看windows内核对象简介。线程内核对象,操作系统用线程内核对象来管理线程,操作系统还用它来存放统计信息。线程栈,用于维护线程执行时所需的所有函数参数和局部变量,就是C#程序员常说的线程栈和托管堆中的线程栈。我们知道进程是有惰性的,它的所有工作都是由线程完成的,而进程只是为线程提供场地,线程函数执行我们让它执行的任务,最终线程函数将终止运行并返回,线程将终止运行,线程的内存将被释放,线程内核对象的使用计数将减一,如果线程内核对象的使用计数减为0,线程内核对象将被销毁。说了这么多,感觉有点虚,我们还是来看看创建线程的函数吧。CreateTh 阅读全文
posted @ 2012-12-16 22:49 啊汉 阅读(4688) 评论(0) 推荐(3) 编辑
摘要:内核对象只是操作系统内核分配的一个内存块,并且只能由操作系统内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。Windows提供一组函数创建和操作内核对象。调用一个创建内核对象的函数,函数会返回一个句柄,该句柄标识了这个内核对象,这个句柄可由当前进程中的所有线程调用。也可以通过跨进程边界共享内核对象,让其他的进程调用。使用计数。内核对象有个使用计数数据成员,标识内核对象被多少个进程所使用。大部分情况是内核对象只被创建它的进程所有使用,当这个进程退出时,内核对象的使用计数就会减一,如果内核对象的使用计数为0时,内核对象就会自动销毁,如果内核对象被多个进程使用时,它的生命周期就可 阅读全文
posted @ 2012-12-08 18:05 啊汉 阅读(7745) 评论(0) 推荐(3) 编辑