您的位置:首页 >> 编程开发 >> Visual C++ >> 进程和线程 >> 正文
进程和线程 RSS
 

WIN32多线程程序设计学习笔记(第四章上)

http://www.rdxx.com 06年12月12日 20:22 互联网 我要投稿

 

WIN32多线程程序设计学习笔记(第四章 上)

 

到目前为止,我已经知道如何创建线程,销毁线程及如何判断一个线程是否结束了;但运用线程,管理线程,如何使线程按自己意愿正确运行才是多线程程序设计的重点及难点。

 

大家知道,线程具有并发性,在同一时间段会存在多个线程,当这些线程同时存取同一数据时,就会有问题。就像在超市储物品一样,来的时候物品箱是空,转身拿物品准备储的时候,发现物品箱已被占用了。这时,物品箱就是我所说的同一数据,人指的就是线程了。

 

那么,如何让线程彼此互相合作,互不干扰呢?------协调线程的工作是由同步机制来完成的。正如书上所说:“有放多种同步机制可以运用。使用哪一种则完全视欲解决的问题而定。这些同步机制还能用各种方式组合在一起运用,以产生更精密的机制”。

 

首先,让我们看看最容易使用的一个同步机制;它包含同步机制的设计思想,拿握了它也就可以不费什么劲拿握其它的同步机制了。

1 Critical Sections(关键区域、临界区域)

程序片段:

       CRITICAL_SECTION         gBoxKey  ;

       DWORD WINAPI ThreadFun(LPVOID n)

       {

              //进入关键区域 (情景:关上物品箱,拨下钥匙)

              EnterCreiticalSection (&gBoxKey ) ;1

                     //处理一些不可分割的操作。。。。。

                     //(情景:转身拿物品,储物品,去购物。。。。)

              //离开关键区域 (情景:打开物品箱,拿出储存的物品,插上钥匙)                

              LeaveCreiticalSection (&gBoxKey) ;2

       }

 

       void main()

       {

              //初始化全局锁 (情景:生成物品箱的钥匙)

              InitializeCriticalSection( &gBoxKey ) ;             

              //产生两个线程 (情景:准备两个人抢一个物品箱)

              HANDLE hMan1 = CreateThread(NULL,0,ThreadFun,…….);

              HANDLE hMan2 = CreateThread(NULL,0,ThreadFun,…….);

 

              CloseHandle(hMan1);

              CloseHandle(hMan2);

9 7 3 1 2 3 4 4 8 :


 
 
标签: 学习笔记 , 多线程 , 程序设计 , Win32 , 学习 , 程序 , 设计 , 线程 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站