扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:宋宝华 来源:天极开发 2007年10月16日
关键字:
HANDLE CreateSemaphore ( PSECURITY_ATTRIBUTE psa, LONG lInitialCount, //开始时可供使用的资源数 LONG lMaximumCount, //最大资源数 PCTSTR pszName); |
BOOL WINAPI ReleaseSemaphore( HANDLE hSemaphore, LONG lReleaseCount, //信号量的当前资源数增加lReleaseCount LPLONG lpPreviousCount ); |
HANDLE OpenSemaphore ( DWORD fdwAccess, BOOL bInherithandle, PCTSTR pszName ); |
int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) { globalVar++; return 0; } DWORD WINAPI ThreadFunc2(LPVOID n) { globalVar++; return 0; } |
00401038 mov eax,[globalVar (0042d3f0)] 0040103D add eax,1 00401040 mov [globalVar (0042d3f0)],eax |
int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) { InterlockedExchangeAdd(&globalVar,1); return 0; } DWORD WINAPI ThreadFunc2(LPVOID n) { InterlockedExchangeAdd(&globalVar,1); return 0; } |
HANDLE CreateWaitableTimer( PSECURITY_ATTRISUTES psa, BOOL fManualReset,//人工重置或自动重置定时器 PCTSTR pszName); |
BOOL SetWaitableTimer( HANDLE hTimer, //要设置的定时器 const LARGE_INTEGER *pDueTime, //指明定时器第一次激活的时间 LONG lPeriod, //指明此后定时器应该间隔多长时间激活一次 PTIMERAPCROUTINE pfnCompletionRoutine, PVOID PvArgToCompletionRoutine, BOOL fResume); |
BOOl Cancel WaitableTimer( HANDLE hTimer //要取消的定时器 ); |
HANDLE OpenWaitableTimer ( DWORD fdwAccess, BOOL bInherithandle, PCTSTR pszName ); |
#include <windows.h> #include <stdio.h> CRITICAL_SECTION cs1, cs2; long WINAPI ThreadFn(long); main() { long iThreadID; InitializeCriticalSection(&cs1); InitializeCriticalSection(&cs2); CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFn, NULL, 0,&iThreadID)); while (TRUE) { EnterCriticalSection(&cs1); printf("\n线程1占用临界区1"); EnterCriticalSection(&cs2); printf("\n线程1占用临界区2"); printf("\n线程1占用两个临界区"); LeaveCriticalSection(&cs2); LeaveCriticalSection(&cs1); printf("\n线程1释放两个临界区"); Sleep(20); }; return (0); } long WINAPI ThreadFn(long lParam) { while (TRUE) { EnterCriticalSection(&cs2); printf("\n线程2占用临界区2"); EnterCriticalSection(&cs1); printf("\n线程2占用临界区1"); printf("\n线程2占用两个临界区"); LeaveCriticalSection(&cs1); LeaveCriticalSection(&cs2); printf("\n线程2释放两个临界区"); Sleep(20); }; } |
long WINAPI ThreadFn(long lParam) { while (TRUE) { EnterCriticalSection(&cs1); printf("\n线程2占用临界区1"); EnterCriticalSection(&cs2); printf("\n线程2占用临界区2"); printf("\n线程2占用两个临界区"); LeaveCriticalSection(&cs1); LeaveCriticalSection(&cs2); printf("\n线程2释放两个临界区"); Sleep(20); }; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者