- 1、本文档共53页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11程序设计实践6w-概要设计和模块化讲解
* * #includestdio.h #includewindows.h int tickets=100; DWORD WINAPI Fun1Proc(LPVOID pPararneter) { while(tickets0) printf(“thread1 sell ticket : %d\n”,tickets--); return 0; } DWORD WINAPI Fun2Proc(LPVOID pPararneter) { while(tickets0) printf(“thread2 sell ticket : %d\n”,tickets--); return 0; } int main() { HANDLE hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); HANDLE hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); Sleep(4000); return 0; } * * 线程的同步 利用互斥对象(mutex)实现线程的同步,互斥对象能够确保线程拥有对单个资源的互斥访问权。 3个操作 互斥对象的创建 互斥对象的释放 互斥对象的请求 * 互斥对象的创建 HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes ,BOOL binitialOwner,LPCTSTR lpNarne) lpMutexAttributes:可以给该参数传递 NULL值,让互斥对象使用默认的安全性 binitialOwner:BOOL类型,指定互斥对象初始的拥有者。如果该值为真,则创建这个互斥对象的线程获得该对象的所有权;否则,该线程将不获得所创建的互斥对象的所有权。 lpName:指定互斥对象的名称。如果此参数为 NULL.则创建一个匿名的互斥对象。如果调用成功,该函数将返回所创建的互斥对象的句柄 * 互斥对象的释放 BOOL ReleaseMutex ( HANDLE hMutex ); ReleaseMutex函数只有一个HANDLE类型的参数,即需要释放的互斥对象的句柄。该函数的返回值是BOOL类型,如果函数调用成功,返回非0值;否则返回0值。 * 互斥对象的请求 DWORD WaitForSingleObject( HANDLE hHandle , DWORD dwMilliseconds ); Handle:所请求的互斥对象的句柄。一旦互斥对象处于有信号状态,则该函数就返回。如果该互斥对象始终处于无信号状态,即未通知的状态,则该函数就会一直等待,这样就会暂停线程的执行。 dwMilliseconds:指定等待的时间间隔,以毫秒为单位。如果指定的时间间隔己过,即使所请求的对象仍处于无信号状态,WaitForSingleObject函数也会返回。如果将此参数设置为0,那么 WaitForSingleObject函数将测试该对象的状态并立即返回;如果将此参数设置为INFINITE, 则该函数会永远等待,直到等待的对象处于有信号状态才会返回。 调用WaitForSingleObject函数后,该函数会一直等待,只有在以下两种情况下才会返回: 1)指定的对象变成有信号状态。2)指定的等待时间间隔己过。 * HANDLE hMutex; int tickets=100; ?DWORD WINAPI Fun1Proc(LPVOID pPararneter) { while(tickets0) { WaitForSingleObject(hMutex,INFINITE); if(tickets0) printf(thread1 sell ticket : %d\n,tickets--); ReleaseMutex(hMutex); } return 0; } * DWORD WINAPI Fun2Proc(LPVOID pPararneter) { while(tickets0) { WaitForSingleObject(hMutex,INFINITE); if(tickets0) printf(thread2 sell ticket : %d\n,tickets--); ReleaseMutex(hMutex); } return 0; } * int main() { HANDLE hThread1,hThread2; hMutex=CreateM
文档评论(0)