当前位置:首页 > 操作系统原理实验报告
LONG InterlockedExchangeAdd ( PLONG Addend, // pointer to the addend LONG Increment // increment value );
4、 主要数据结构
void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection ); void EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection); void LeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection); void DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection); LONG InterlockedIncrement( LPLONG lpAddend ) ; // 增一操作 LONG InterlockedDecrement( LPLONG lpAddend); // 减一操作 LONG InterlockedExchangeAdd ( PLONG Addend, // pointer to the addend LONG Increment // increment value
三、实验结果 1、基本数据 源程序代码行数 68
2.测试结果分析
完成该实验投入的时间(小时数) 与其他同学讨论次数 2 0
//增减任意值
四、实验体会 1、实验体会和收获
熟练了Windows系统环境下线程的创建与撤销,熟悉了Windows系统提供的线程互斥API,使用Windows系统提供的线程互斥API解决实际问题。
五、源代码
#include
static int count=5; //共享变量
static HANDLE h1,h2; //两个子进程的句柄变量
LPCRITICAL_SECTION hCriticalSection; //定义指向临界区对象的地址指针 CRITICAL_SECTION Critical; //定义临界区
void func1( ); //线程函数的定义不符合WIN32格式,后面CreateThread函数中
void func2( ); //要附加强制类型转换
//主线程的实现
int main(int argc, TCHAR* argv[],TCHAR* envp[]) {
int nRetCode=0;
DWORD dwThreadID1, dwThreadID2;
hCriticalSection=&Critical; //将指向临界区的对象的指针指向临界区 InitializeCriticalSection(hCriticalSection); //初始化临界区 //创建子线程func1
h1=CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,
(LPTHREAD_START_ROUTINE)func1, (LPVOID)NULL, 0,&dwThreadID1);
if(h1==NULL)printf(\else printf(\
//创建子线程func2
h2=CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,
(LPTHREAD_START_ROUTINE)func2, (LPVOID)NULL, 0,&dwThreadID2);
if(h2==NULL) printf(\else printf(\
Sleep(1000); CloseHandle(h1); CloseHandle(h2);
DeleteCriticalSection(hCriticalSection); //删除临界区 ExitThread(0); return nRetCode; }//主线程结束
//子线程fun c2的实现 void func2()
{ int r2;
EnterCriticalSection(hCriticalSection); //进入临界区 r2=count; Sleep(100); r2=r2+1; count=r2;
printf(\
LeaveCriticalSection(hCriticalSection); //退出临界区 }
//子线程func1的实现 void func1() { int r1;
EnterCriticalSection(hCriticalSection); //进入临界区 r1=count; Sleep(500); r1=r1+1; count=r1;
printf(\
LeaveCriticalSection(hCriticalSection); //退出临界区 }
共分享92篇相关文档