第18章___线程同步互斥和进程间的通信.pptVIP

  • 1
  • 0
  • 约1.14万字
  • 约 45页
  • 2017-06-19 发布于湖北
  • 举报

第18章___线程同步互斥和进程间的通信.ppt

同步对象 互斥的引入(错误例子) #include iostream.h #include windows.h HANDLE thread1; HANDLE thread2; int tickets=100; DWORD WINAPI Thread1Proc(LPVOID lparam); DWORD WINAPI Thread2Proc(LPVOID lparam); void main(){ thread1=CreateThread(NULL,0,Thread1Proc,NULL,0,NULL); thread2=CreateThread(NULL,0,Thread2Proc,NULL,0,NULL); Sleep(40000); CloseHandle(thread1); CloseHandle(thread2); } DWORD WINAPI Thread1Proc(LPVOID lparam){ int t; while(tickets0){ t=tickets; Sleep(100); coutThread1 sell:t--endl; tickets=t; } return 0; } DWORD WINAPI Thread2Proc(LPVOID lparam){ int t; while(tickets0){ t=tickets; Sleep(100); coutThread2 sell:t--endl; tickets=t; } return 0; } 互斥对象 互斥对象是一个内核对象,它能够确保一个线程对单个资源的互斥访问权 拥有使用数量、一个线程ID和一个计数器 线程ID用来指明哪个线程当前拥有访问权,计数器用来指明该线程拥有互斥对象的次数 互斥对象相关函数 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, //继承属性,可以为空 BOOL bInitialOwner, //创建后是否立即拥有访问权 LPCTSTR lpName ); //互斥对象的名字,为NULL则为匿名互斥对象 功能:创建一个命名或匿名的互斥对象,返回句柄 函数返回值: 如对象已存在,则返回原来存在的对象句柄,创建成功返回新句柄,创建失败返回NULL 互斥对象相关函数 DWORD WaitForSingleObject( HANDLE hHandle, //互斥对象句柄 DWORD dwMilliseconds ); //等待时间 功能:等待获取互斥对象的访问权,未获取之前会一直等待,或用完dwMilliseconds为止, dwMilliseconds可以为0-INFINITE 一旦一个线程获取了访问权,函数会把互斥对象置为不可用状态 函数返回值为: WAIT_OBJECT_0 获得拥有权, WAIT_TIMEOUT等待超长, WAIT_ABANDONED 前拥有者异常终止 互斥对象相关函数 DWORD WaitForMultipleObjects( DWORD nCount,//数组中句柄个数 const HANDLE* lpHandles, //对象句柄数组 BOOL bWaitAll, //是否等待全部 DWORD dwMilliseconds ); 互斥对象相关函数 BOOL ReleaseMutex( HANDLE hMutex ); 功能:释放对互斥对象的访问权,使互斥对象处于有信号(可用)状态 使用互斥量后的程序 #include iostream.h #include windows.h HANDLE thread1; HANDLE thread2; int tickets=100; DWORD WINAPI Thread1Proc(LPVOID lparam); DWORD WINAPI Thread2Proc(LPVOID lparam); HANDLE hMutex; void main(){ thread1=CreateThread(NULL,0,Thread1Proc,NULL,0,NULL); thread2=CreateThread(NULL,0,Thread2Proc,NULL,0,NULL); hMutex=CreateMutex(NULL,false,NULL); while(tickets0)Sleep(1000); CloseHandle(thread1); CloseHandle(thread2); } DWORD WINAPI Thread1Proc(LPVOID lparam){ int t

文档评论(0)

1亿VIP精品文档

相关文档