012244信安1401杨紫淇.docx
- 文档编号:23912733
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:20
- 大小:164.66KB
012244信安1401杨紫淇.docx
《012244信安1401杨紫淇.docx》由会员分享,可在线阅读,更多相关《012244信安1401杨紫淇.docx(20页珍藏版)》请在冰豆网上搜索。
012244信安1401杨紫淇
实验报告
课程名称操作系统
实验项目2.3实验三线程的互斥
实验仪器PC机一台
学院信息管理学院
专业信息安全
班级/学号信安14012014012244
学生姓名杨紫淇
实验日期2016.4.14
成绩
指导教师刘亚辉
北京信息科技大学
信息管理学院
(课程上机)实验报告
实验课程名称:
操作系统专业:
信息安全班级:
信安1401
实验名称
线程的互斥
实验地点
小营学院机房702
实验时间
2016-4-14
2.3.1实验目的
(1)熟练掌握Windows系统环境下线程的创建与撤销。
(2)熟悉Windows系统提供的线程互斥API。
(3)使用Windows系统提供的线程互斥API解决实际问题。
2.3.2实验要求
能正确的使用临界区对象,包括初始化临界区InitializeCriticalSection()、进入临界区
EnterCriticalSection()、退出临界区LeaveCritical()及删除临界区DeleteCriticalSection()进
一步理解线程的互斥。
4.1源程序
//b.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
#include"b.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
DWORDBufferSize=1024;
charbuf[1024];
/////////////////////////////////////
//Theoneandonlyapplicationobject
CWinApptheApp;
usingnamespacestd;
voidFileReadWrite_NoBuffer(char*source,char*destination);
int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])
{
intnRetCode=0;
printf("CallFileReadWrite_NoBuffer!
\n");
FileReadWrite_NoBuffer("D:
/source.txt","D:
/nobuffer.txt");
returnnRetCode;
}
voidFileReadWrite_NoBuffer(char*source,char*destination)
{
HANDLEhandle_src,handle_dst;
DWORDNumberOfByteRead,NumberOfByteWrite;
BOOLcycle;
char*buffer;
buffer=buf;
handle_src=CreateFile(source,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
NULL);
handle_dst=CreateFile(destination,
GENERIC_WRITE,
NULL,
NULL,
CREATE_ALWAYS,
NULL,
NULL);
if(handle_src==INVALID_HANDLE_VALUE||
handle_dst==INVALID_HANDLE_VALUE)
{
printf("FileCreateFail!
\n");
exit
(1);
}
cycle=TRUE;
while(cycle)
{
NumberOfByteRead=BufferSize;
if(!
ReadFile(handle_src,buffer,NumberOfByteRead,&NumberOfByteRead,NULL))
{
printf("ReadFileError!
%d\n",GetLastError());
exit
(1);
}
if(NumberOfByteRead if(! WriteFile(handle_dst,buffer,NumberOfByteRead,&NumberOfByteWrite,NULL)) { printf("WriteFileError! %d\n",GetLastError()); exit (1); } } CloseHandle(handle_src); CloseHandle(handle_dst); } 4.2源程序 //d.cpp: Definestheentrypointfortheconsoleapplication. // #include"stdafx.h" #include"d.h" #ifdef_DEBUG #definenewDEBUG_NEW #undefTHIS_FILE staticcharTHIS_FILE[]=__FILE__; #endif DWORDBufferSize=1024; charbuf[1024]; ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////// //Theoneandonlyapplicationobject CWinApptheApp; usingnamespacestd; voidFileReadWrite_Overlapped(char*source,char*destination); int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]) {intnRetCode=0; printf("CallFileReadWrite_Overlapped! \n"); FileReadWrite_Overlapped("D: /source.txt","D: /nobuffer.txt"); returnnRetCode; } voidFileReadWrite_Overlapped(char*source,char*destination) {HANDLEhandle_src,handle_dst; DWORDNumberOfByteRead,NumberOfByteWrite; BOOLcycle; char*buffer; buffer=buf; handle_src=CreateFile(source, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); handle_dst=CreateFile(destination, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL); if(handle_src==INVALID_HANDLE_VALUE|| handle_dst==INVALID_HANDLE_VALUE) {printf("FileCreateFail! \n"); exit (1); } cycle=TRUE; while(cycle) { NumberOfByteRead=BufferSize; if(! ReadFile(handle_src,buffer,NumberOfByteRead, &NumberOfByteRead, NULL)) { printf("ReadFileError! %d\n",GetLastError()); exit (1); } if(NumberOfByteRead if(! WriteFile(handle_dst,buffer,NumberOfByteRead,&NumberOfByteWrite,NULL)) {printf("WriteFileError! %d\n",GetLastError()); exit (1); } } CloseHandle(handle_src); CloseHandle(handle_dst); } 4.3源程序: //e.cpp: Definestheentrypointfortheconsoleapplication. // #include"stdafx.h" #include"e.h" #ifdef_DEBUG #definenewDEBUG_NEW #undefTHIS_FILE staticcharTHIS_FILE[]=__FILE__; #endif DWORDBufferSize=1024; charbuf[1024]; ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////// //Theoneandonlyapplicationobject CWinApptheApp; usingnamespacestd; voidFileReadWrite_Overlapped(char*source,char*destination); int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]) {intnRetCode=0; printf("CallFileReadWrite_Overlapped! \n"); FileReadWrite_Overlapped("D: /source.txt","D: /nobuffer.txt"); returnnRetCode; } voidFileReadWrite_Overlapped(char*source,char*destination) {HANDLEhandle_src,handle_dst; DWORDNumberOfByteRead,NumberOfByteWrite,Error; BOOLcycle; char*buffer; buffer=buf; OVERLAPPEDoverlapped; handle_src=CreateFile(source, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING|FILE_FLAG_OVERLAPPED, NULL); handle_dst=CreateFile(destination, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL); if(handle_src==INVALID_HANDLE_VALUE|| handle_dst==INVALID_HANDLE_VALUE) {printf("FileCreateFail! \n"); exit (1); } cycle=TRUE; overlapped.hEvent=NULL; overlapped.Offset=-BufferSize; overlapped.OffsetHigh=0; while(cycle) {overlapped.Offset=overlapped.Offset+BufferSize; NumberOfByteRead=BufferSize; if(! ReadFile(handle_src, buffer, NumberOfByteRead, &NumberOfByteRead, &overlapped)) {switch(Error=GetLastError()) {caseERROR_HANDLE_EOF: cycle=FALSE; break; caseERROR_IO_PENDING: if(! GetOverlappedResult(handle_src, &overlapped, &NumberOfByteRead, TRUE)) {printf("GetOverlappedResult! %d\n",GetLastError()); exit (1); } break; default: break; } } if(NumberOfByteRead if(! WriteFile(handle_dst, buffer, NumberOfByteRead, &NumberOfByteWrite, NULL)) {printf("WriteFileError! %d\n",GetLastError()); exit (1); } } CloseHandle(handle_src); CloseHandle(handle_dst); } 4.4源程序: //one.cpp: Definestheentrypointfortheconsoleapplication. // #include"stdafx.h" #include"one.h" #ifdef_DEBUG #definenewDEBUG_NEW #undefTHIS_FILE staticcharTHIS_FILE[]=__FILE__; #endif DWORDBufferSize=2048; charbuf[2048]; CWinApptheApp; usingnamespacestd; voidFileReadWrite_NoBuffer(char*source,char*destination); voidFileReadWrite_Sequential_Scan(char*source,char*destination); voidFileReadWrite_Overlapped(char*source,char*destination); int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]) { inti,nRetCode=0; DWORDtick,tick_s; DWORDnobuffer_start_time,sequential_start_time,overlapped_start_time; DWORDnobuffer_end_time,sequential_end_time,overlapped_end_time; DWORDnobuffer_average_time=0; DWORDsequential_average_time=0; DWORDoverlapped_average_time=0; printf("NoBufferisrunning! \n"); nobuffer_start_time=GetTickCount(); for(i=0;i<10;i++) { tick=GetTickCount(); FileReadWrite_NoBuffer("D: /source.txt","D: /nobuffer.txt"); printf("NoBuffer! : %d,%dms\n",i,GetTickCount()-tick); } nobuffer_end_time=GetTickCount(); printf("Sequentialisrunning! \n"); sequential_start_time=GetTickCount(); for(i=0;i<10;i++) { tick_s=GetTickCount(); FileReadWrite_Sequential_Scan("D: /source.txt","D: /sequential.txt"); printf("Sequential! : %d%dms\n",i,GetTickCount()-tick_s); } sequential_end_time=GetTickCount(); printf("Overlappedisrunning! \n"); overlapped_start_time=GetTickCount(); for(i=0;i<10;i++) { tick=GetTickCount(); FileReadWrite_Overlapped("D: /source.txt","D: /overlapped.txt"); printf("Overlapped! : %d%dms\n",i,GetTickCount()-tick); } overlapped_end_time=GetTickCount(); printf("NowtheResult! \n"); printf("NoBuffer_Average: %dms\n",(nobuffer_end_time-nobuffer_start_time)/10); printf("Sequential_Average: %dms\n",(sequential_end_time-sequential_start_time)/10); printf("Overlapped_Average: %dms\n",(overlapped_end_time-overlapped_start_time)/10); returnnRetCode; } voidFileReadWrite_NoBuffer(char*source,char*destination) { HANDLEhandle_src,handle_dst; DWORDNumberOfByteRead,NumberOfByteWrite; BOOLcycle; char*buffer; buffer=buf; handle_src=CreateFile(source,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,NULL); handle_dst=CreateFile(destination,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,NULL,NULL); if(handle_src==INVALID_HANDLE_VALUE||handle_dst==INVALID_HANDLE_VALUE) { printf("FileCreateFail! \n"); exit (1); } cycle=TRUE; while(cycle) { NumberOfByteRead=BufferSize; if(! ReadFile(handle_src,buffer,NumberOfByteRead,&NumberOfByteRead,NULL)) { printf("WriteFileError! %d\n",GetLastError()); exit (1); } if(NumberOfByteRead if(! WriteFile(handle_dst,buffer,NumberOfByteRead,&NumberOfByteWrite,NULL)) { printf("WriteFileError! %d\n",GetLastError()); exit (1); } } } voidFileReadWrite_Sequential_Scan(char*source,char*destination) { HANDLEhandle_src,handle_dst; DWORDNumberOfByteRead,NumberOfByteWrite; BOOLcycle; char*buffer; buffer=buf; handle_src=CreateFile(source, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); handle_dst=CreateFile(destination, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL); if(handle_src==INVALID_HANDLE_VALUE|| handle_dst==INVALID_HANDLE_VALUE) { printf("FileCreateFail! \n"); exit (1); } cycle=TRUE; while(cycle) { NumberOfByteRead=BufferSize; if(! ReadFile(handle_src,buffer,NumberOfByteRead,&NumberOfByteRead,NULL)) { printf("ReadFileError! %d\n",GetLastError()); exit (1); } if(NumberOfByteRead if(! WriteFile(handle_dst,buffer,NumberOfByteRead,&NumberOfByteWrite,NULL)) { printf("WriteFileError! %d\n",GetLastError()); exit (1); } } CloseHandle(handle_src); CloseHandle(handle_dst); } voidFileReadWrite_Overlapped(char*source,char*destination) { HANDLEhandle_src,handle_dst; DWORDNumberOfByteRead,NumberOfByteWrite,Error; BOOLcycle; char*buffer; buffer=buf; OVERLAPPED
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 012244 1401 杨紫淇