正 文

利用API在Windows下创建进程和线程


www.7dspace.com  更新日期:2006-1-24 5:09:04  七度空间


  2.4 线程实验3---最简单的一个临界资源的读者,写者程序.

  这个程序要实现的是最简单的读者,写者程序,读者将1~10十个数字依次填入临界资源区gData,当且仅当gData被读者消费后,写者才可以写入下一个数.

/*测试程序4:
最简单的一个临界资源的读者,写者程序.
*/

DWORD WINAPI threadReader(LPVOID lpvoid)
{
 int reader_Data;
 int busyTime=10000;
 float tmp;
 int i;

 while(gRunFlag)
 {
  while(stateFlag==WRITER_FLAG)
   for(i=0;i<busyTime;i++)
    tmp=pow(2,10);
    reader_Data=gData;
    printf("reader gets data:%d\n",gData);
    stateFlag=WRITER_FLAG;
 }
 printf("reader ends\n");
 return NULL;
}

DWORD WINAPI threadWriter(LPVOID lpvoid)
{
 int upTime=((INTEGER*)lpvoid)->mInt;
 int busyTime=10000;
 float tmp;
 int i;

 while(gRunFlag)
 {
  while(stateFlag==READER_FLAG)
  for(i=0;i<busyTime;i++)
   tmp=pow(2,10);
  gData++;
  printf("writer gets data:%d\n",gData);

  if(gData==upTime)
   gRunFlag=false;
  stateFlag=READER_FLAG;
 }
 printf("writer ends\n");
 return NULL;
}

/*Main 中的调用*/

……
CreateThread(NULL,0,threadReader,tmpInt,0,&targetThreadID);
CreateThread(NULL,0,threadWriter,tmpInt,0,&targetThreadID);
……

  测试结果: (如图2)


图2

  2.5 几点说明:

  2.5.1 主调用程序在结束时使用Sleep(5000)的意图在于:使得由它所产生的子线程可以在主进程结束之前,完成如资源释放一类的工作。

  2.5.2 在随机线程产生测试程序中:

  之所以采用在每个线程内部用

srand((unsigned int)time (NULL));

  去初始化每个线程,是为了使得所有的线程拥有自己的随机数种子,否则,如果是在主调用程序中去初始化随机数种子数,则所有的线程得到的随机数序列都是一样的,将无法产生随机效果。

  3、应用及推广:

  采用这种在Windows下利用控制台调用Windows API进行操作系统实验的方法,具有代码简洁,观察效果好与实现目标接近等优点。

6页,页码:[1] [2] [3] [4] [5] [6] 

上一篇:Excel中录入固定格式数据的技巧
下一篇:Windows 2000缓冲区溢出技术原理
标题:利用API在Windows下创建进程和线程 作者:EmilMatthew 来源:blog
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐