- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
同步对象-Read
同步对象
线程
需要同步对象在某些时候进行同步操作。
同步对象状态
未通知(Non-signaled)
通知(Signaled)
同步对象类型
Mutex
Semaphore
Event
Critical Section
同步对象
等待函数
DWORD WaitForSingleObject(
HANDLE hHandle, //同步对象的句柄
DWORD dwMilliseconds //等待的ms数
);
DWORD WaitForMultipleObjects(
DWORD nCount, //lpHandles中的同步对象个数
CONST HANDLE* lpHandles, //同步对象句柄的数组
BOOL fWaitALL, //是否等该lpHandles中所有的内核对象
DWORD dwMilliseconds //等待的ms数
);
同步对象(Mutex)
概览
同一时刻只有一个线程可以拥有Mutex对象
全局名称的Mutex可以跨进程使用。
在没有线程拥有它时处于通知状态
被线程拥有的时候处于非通知状态
函数
创建一个Mutex同步对象
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, //不支持,设置为NULL
BOOL bInitialOwner, //是否为创建该Mutex的线程所拥有
LPCTSTR lpName //可选,该Mutex的名字
);
释放对Mutex的占用
BOOL ReleaseMutex(
HANDLE hMutex //Mutex的句柄
);
同步对象(Mutex)
实例——使用Mutex对象对共享的全局变量i进行访问
HANDLE hMutex;
INT i=0;
//创建Mutex对象和线程
VOID Init()
{
hMutex = CreateMutex(NULL,FALSE,NULL);
CreateThread(NULL, NULL,ThreadProc1, NULL, NULL, NULL);
CreateThread(NULL, NULL,ThreadProc2, NULL, NULL, NULL)
}
DWORD WINAPI THreadProc1(LPVOID lpParameter)
{
WaitForSingleObject(hMutex,INFINITE); //获得Mutex对象
i++; //访问共享资源
ReleaseMutex(hMutex); //释放同步对象
return 0;
}
DWORD WINAPI THreadProc2(LPVOID lpParameter)
{
WaitForSingleObject(hMutex,INFINITE); //获得Mutex对象
i--; //访问共享资源
ReleaseMutex(hMutex); //释放同步对象
return 0;
}
同步对象(Semaphore)
概览
限制占有共享资源的数量(如果一个Semaphore带有记数n,这表示同时最多可以有n个线程占有该Semaphore)
全局名称的Semaphores可以跨进程使用。
引用计数大于零时处于通知状态
引用计数小于等于0时处于非通知状态
函数
创建一个Semaphore对象
HANDLE WINAPI CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //不支持,设为NULL
LONG lInitialCount, //初始计数
LONG lMaximumCo
文档评论(0)