2022年操作系统实验二 .pdf
《2022年操作系统实验二 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验二 .pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验二并发与调度一、实验目的在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000 线程同步的理解。通过分析实验程序,了解管理事件对象的API。了解在进程中如何使用事件对象,在进程中如何使用互斥体对象,线程如何通过文件映射对象发送数据。在 Linux Redhat 9.0操作系统平台上,用pipe() 创建一个管道文件,然后用fork()创建两个生产进程和两个消费进程,它们之间通过pipe() 传递消息。二、实验环境硬件环境:计算机一台,局域网环境;软件环境: Windows 2000 Professional,Linux Redhat 9.0 操作系统平台,Visual
2、C+ 6.0企业版。三、实验内容和步骤第一部分:互斥体对象本程序中显示的类CCountUpDown使用了一个互斥体来保证对两个线程间单一数值的访问。 每个线程都企图获得控制权来改变该数值,然后将该数值写入输出流中。创建者实际上创建的是互斥体对象,计数方法执行等待并释放,为的是共同使用互斥体所需的资源(因而也就是共享资源) 。利用互斥体保护共享资源/ mutex 项目# include # include class CCountUpDown public: CCountUpDown(int nAccesses) : m_hThreadInc(INV ALID_HANDLE_VALUE) , m
3、_hThreadDec(INVALID_HANDLE_VALUE) , m_hMutexValue(INV ALID_HANDLE_VALUE) , m_nValue(0) , m_nAccess(nAccesses) m_hMutexValue = : CreateMutex( NULL, TRUE, NULL) ; m_hThreadInc = : CreateThread( NULL, 0, IncThreadProc, reinterpret_cast (this) , 0, NULL) ; m_hThreadDec = : CreateThread( NULL, 0, DecThre
4、adProc, reinterpret_cast (this) , 0, NULL) ; : ReleaseMutex(m_hMutexValue) ; virtual CCountUpDown() : CloseHandle(m_hThreadInc) ; : CloseHandle(m_hThreadDec) ; : CloseHandle(m_hMutexValue) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - v
5、irtual void WaitForCompletion() if (m_hThreadInc != INVALID_HANDLE_VALUE & m_hThreadDec != INVALID_HANDLE_VALUE) : WaitForSingleObject(m_hThreadInc, INFINITE) ; : WaitForSingleObject(m_hThreadDec, INFINITE) ; protected: virtual void DoCount(int nStep) while (m_nAccess 0) : WaitForSingleObject(m_hMut
6、exValue, INFINITE) ; m_nValue += nStep; std : cout “thread: ” : GetCurrentThreadId() “value: ” m_nValue “access: ” m_nAccess std : endl;-m_nAccess; : Sleep(1000) ; / 使显示速度放慢: ReleaseMutex(m_hMutexValue) ; static DWORD WINAPI IncThreadProc(LPVOID lpParam) CCountUpDown* pThis = reinterpret_cast (lpPar
7、am) ; pThis - DoCount(+1) ; return(0) ; static DWORD WINAPI DecThreadProc(LPVOID lpParam) CCountUpDown* pThis = reinterpret_cast (lpParam) ; pThis - DoCount(-1) ; return(0) ; protected: HANDLE m_hThreadInc; HANDLE m_hThreadDec; HANDLE m_hMutexValue; int m_nValue; int m_nAccess ; ; void main() CCount
8、UpDown ud(50) ; ud.WaitForCompletion() ; 分析程序的运行结果,可以看到线程(加和减线程 ) 的交替执行(因为 Sleep() API 允许Windows 切换线程 ) 。在每次运行之后,数值应该返回初始值(0) ,因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行。1) 请描述运行结果(如果运行不成功,则可能的原因是什么?) :_ _ 2) 根据运行输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述:_ _ 第二部分线程通过文件对象发送数据Windows 2000 提供的线程间通讯类内核对象允许同一进程或跨
9、进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 演示线程通过文件对象发送数据# include # include static LPCTSTR g_szFileName = “w2kdg.Fileobj.file.data.txt ” ; static DWOR
10、D WINAPI ThreadProc (LPVOID lpParam) LONG nAdd = reinterpret_cast (lpParam) ; TCHAR szFullName MAX_PA TH ; : GetTempPath(MAX_PA TH, szFullName) ; / 取得路径: strcat(szFullName, g_szFileName) ; HANDLE hFile = : CreateFile( szFullName, / 文件的完全名称GENERIC_READ | GENERIC_WRITE, / 具有所有的访问权FILE_SHARE_READ, / 允许
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验二 2022 操作系统 实验
限制150内