实践四用Win32同步对象解决有限缓冲区问题.docVIP

  • 30
  • 0
  • 约 8页
  • 2017-07-18 发布于湖北
  • 举报

实践四用Win32同步对象解决有限缓冲区问题.doc

实践四:用Win32同步对象解决有限缓冲区问题 完成人: 班级 学号:0506580205 姓名:李立 报告日期: 2009-01-02 一、实践内容简要描述 1、实践目标 用Win32同步对象解决有限缓冲区问题。 2、实践内容 写一个多线程实现C/C++语言程序:一些线程负责找出某个数据范围的素数,并放到一个数组中,另一些线程负责将数组中的素数按次序取出,并显示出来。要求定义一个全局变量的数组int prime[9]用于存放找到的待显示的素数,要理解成“环形缓冲区”。 二、实践报告主要内容 1、设计思路 读取文件内容,通过表示字母W或者D来决定创建的是写线程还是读线程。通过循环来创建线程。设计一个全局变量int count = 0,用于判断缓冲区的满和空,并结合同步对象来实现线程之间的通信,在写或读线程结束自身的同时通知对方,对方也同时结束线程并返回主线程,结束任务。 2、主要数据结构 int prime[9]; //环形缓冲区 int count = 0; //缓冲区计数 HANDLE h_Full; //该句柄用于通知读线程缓冲区中有素数可读 HANDLE h_Empty; //该句柄用于通知写线程缓冲区中有空位可写 3、主要代码分析 #include windows.h #include conio.h #include fstream.h #include stdio.h #define MAX_THREAD_NUM 64 struct ThreadInfo { int serial; char entity; int from; int to; }; int prime[9]; int count = 0; HANDLE h_Full; HANDLE h_Empty; HANDLE h_Thread[MAX_THREAD_NUM]; ThreadInfo thread_info[MAX_THREAD_NUM]; void Control_Thread( char* file ); void RP_ReaderThread(void* p); void RP_WriterThread(void* p); //////////////////////////////////////////////////////// // main fuction //////////////////////////////////////////////////////// int main( int agrc, char* argv[] ) { char ch; for(int i =0;i 9;i ++) prime[i] = 0; while ( TRUE ) { // Cleare screen system( cls ); // display prompt info printf(*********************************************\n); printf( 1.Start test\n); printf( 2.Exit to Windows\n); printf(*********************************************\n); printf(Input your choice(1or2): ); // if the number inputed is error, retry! do{ ch = (char)_getch(); }while( ch != 1 ch != 2); system ( cls ); if ( ch == 1) Control_Thread(ex4.dat); else if ( ch == 2) return 0; printf(\nPress any key to finish this Program. \nThank you test this Proggram!\n); _getch(); } //end while } //end main /////////////////////////////////////////////////////////////// // Reader Priority fuction // file: filename /////////////////////////////////////////////////////////////

文档评论(0)

1亿VIP精品文档

相关文档