线程同步与异步套接字.doc

上传人:汽*** 文档编号:559077107 上传时间:2023-08-11 格式:DOC 页数:12 大小:81.51KB
返回 下载 相关 举报
线程同步与异步套接字.doc_第1页
第1页 / 共12页
线程同步与异步套接字.doc_第2页
第2页 / 共12页
线程同步与异步套接字.doc_第3页
第3页 / 共12页
线程同步与异步套接字.doc_第4页
第4页 / 共12页
线程同步与异步套接字.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《线程同步与异步套接字.doc》由会员分享,可在线阅读,更多相关《线程同步与异步套接字.doc(12页珍藏版)》请在金锄头文库上搜索。

1、线程同步与异步套接字编程1.利用事件对象来实现线程间的同步新建一个win32 console application,取名Event,再建一个Event源文件,编辑:#include#includeDWORDWINAPIFun1Proc(LPVOIDlpParameter);DWORDWINAPIFun2Proc(LPVOIDlpParameter);inttickets=100;HANDLEg_hEvent;voidmain()HANDLEhThread1;HANDLEhThread2;hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);hT

2、hread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);CloseHandle(hThread1);CloseHandle(hThread2);/g_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);/创建一个匿名的有信号状态的事件对象/g_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);/创建一个匿名的无信号状态的事件对象g_hEvent=CreateEvent(NULL,FALSE,FALSE,tickets);/创建一个命名的无信号状态的事件对象SetEvent(g_hEvent

3、);/将事件对象设置为有信号状态if(g_hEvent)if(ERROR_ALREADY_EXISTS=GetLastError()coutonlyoneinstancecanrun!0)Sleep(1);SetEvent(g_hEvent);coutthread1sellticket:tickets-0)Sleep(1);SetEvent(g_hEvent);coutthread2sellticket:tickets-endl;elseSetEvent(g_hEvent);/将事件对象设为有信号状态break;return0;2.利用CriticalSection实现线程同步#include

4、#includeDWORDWINAPIFun1Proc(LPVOIDlpParameter);DWORDWINAPIFun2Proc(LPVOIDlpParameter);inttickets=100;CRITICAL_SECTIONg_cs;/定义一个全局的临界区对象voidmain()HANDLEhThread1;HANDLEhThread2;hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);CloseHandle(hThread1);C

5、loseHandle(hThread2);InitializeCriticalSection(&g_cs);/初始化一个临界区对象Sleep(4000);DeleteCriticalSection(&g_cs);/释放这个临界区对象DWORDWINAPIFun1Proc(LPVOIDlpParameter/threaddata)while(TRUE)EnterCriticalSection(&g_cs);/获得临界区的所有权,进入临界区if(tickets0)Sleep(1);coutthread1sellticket:tickets-0)Sleep(1);coutthread2selltic

6、ket:tickets-endl;elsebreak;LeaveCriticalSection(&g_cs);/离开临界区,并释放所有权return0;3.线程死锁#include#includeDWORDWINAPIFun1Proc(LPVOIDlpParameter);DWORDWINAPIFun2Proc(LPVOIDlpParameter);inttickets=100;CRITICAL_SECTIONg_csA;/定义一个全局的临界区对象CRITICAL_SECTIONg_csB;voidmain()HANDLEhThread1;HANDLEhThread2;hThread1=Cre

7、ateThread(NULL,0,Fun1Proc,NULL,0,NULL);hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);CloseHandle(hThread1);CloseHandle(hThread2);InitializeCriticalSection(&g_csA);/初始化一个临界区对象InitializeCriticalSection(&g_csB);Sleep(4000);DeleteCriticalSection(&g_csA);/释放这个临界区对象DeleteCriticalSection(&g_csB);DWORDWINAPIFun1Proc(LPVOIDlpParameter/threaddata)while(TRUE)EnterCriticalSection(&g_csA);/获得临界区的所有权,进入临界区Sleep(1);EnterCriticalSection(&g_csB);if(tickets0)Sleep(1);coutthread1sellticket:tickets-0)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号