首页 > 代码库 > 015 CONTEXT 线程安全上锁 代码实现
015 CONTEXT 线程安全上锁 代码实现
#define UNICODE #include <stdio.h> #include <tchar.h> #include <windows.h> #include <process.h> BOOL bUseing = FALSE; unsigned int __stdcall ThreadRun(void* lParam) { int nNum = 0; while(true) { if(!bUseing) { bUseing = TRUE; //上锁 printf("ThreadRun:%d\r\n",nNum++); //确保使用完成后才被暂停 bUseing = FALSE; } } } unsigned int __stdcall ThreadMonitor(void* lParam) { HANDLE hThread = (HANDLE)(lParam); while(true) { CONTEXT context; context.ContextFlags = CONTEXT_ALL; //暂停线程 SuspendThread(hThread); GetThreadContext(hThread,&context); if(!bUseing) { bUseing = TRUE; //上锁 printf("EAX:0x%x ESP:0X%x EIP:0x%x\r\n",context.Eax,context.Esp,context.Eip); bUseing = FALSE; } //开始线程 ResumeThread(hThread); } } int main() { HANDLE hThread[2]; hThread[0] = (HANDLE)_beginthreadex(nullptr,0,ThreadRun,nullptr,0,nullptr); hThread[1] = (HANDLE)_beginthreadex(nullptr,0,ThreadMonitor,hThread[0],0,nullptr); WaitForMultipleObjects(sizeof(hThread)/sizeof(HANDLE), hThread,TRUE, INFINITE); for(int i = 0; i<sizeof(hThread)/sizeof(HANDLE);++i) { CloseHandle(hThread[i]); } return 0; }
015 CONTEXT 线程安全上锁 代码实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。