- 30
- 0
- 约 8页
- 2017-07-18 发布于湖北
- 举报
实践四:用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)