chap2Windows多线程编程解说.ppt

例 两个线程分别有一个初值为0的int局部变量,两个线程的行为是在一个循环中,使整型变量递增 一个约束条件,在递增过程中,这两个值的差不超过5 #include windows.h HANDLE hEvent1, hEvent2; int a[ 5 ]; DWORD WINAPI Thread(PVOID pParams ) { int i, num = 0; while( TRUE ) { WaitForSingleObject( hEvent2, INFINITE ); for ( i = 0; i 5; i++ ) a[ i ] = num; SetEvent( hEvent1 ); num++; } return 0; } 事件 int main() { hEvent1 = CreateEvent( NULL, FALSE, TRUE, NULL ); hEvent2 = CreateEvent( NULL, FALSE, FALSE, NULL ); CreateThread( NULL,0,Thread, NULL,0, NULL ); while( TRUE ) { WaitForSingleObject( hEvent1, INFINITE ); printf(%d %d %d %d %d\n, a[ 0 ], a[ 1 ], a[ 2 ], a[ 3 ], a[ 4 ] ); SetEvent( hEvent2 ); } return 0; } 事件 5、信号量 信号量是一个内核对象,可用来管理大量有限的系统资源 一个使用计数 32位整数,最大资源数量 32位整数,当前资源数量 信号量使用规则: 当前资源数量大于0,则等待信号量的线程获得资源继续运行,当前资源数量减1 当前资源数量等于0,则等待信号量的线程继续等待,直到有线程释放信号量,使当前资源数量大于0 创建信号量 5、信号量 HANDLE CreateSemaphore(   PSECURITY_ATTRIBUTES psa,   LONG lInitialCount, // initial count   LONG lMaximumCount, // maximum count   PCTSTR pszName // object name   ); 为现有的一个已命名信号机对象创建一个新句柄。 5、信号量 HANDLE OpenSemaphore(   DWORD fdwAccess,   BOOL bInheritHandle, // inheritance option   PCTSTR pszName // object name   ); SEMAPHORE_ALL_ACCESS 要求对信号量的完全访问; SEMAPHORE_MODIFY_STATE 允许使用ReleaseSemaphore函数; SYNCHRONIZE 允许使用信号量同步。 #include “windows.h“ 例2 CRITICAL_SECTION g_cs; char g_cArray[10]; // 共享资源 DWORD WINAPI ThreadProc1(PVOID pParam) { EnterCriticalSection(g_cs); // 对共享资源进行写入操作 for (int i = 0; i 10; i++) { g_cArray[i] = a; Sleep(1); } LeaveCriticalSection(g_cs); return 0; } DWORD WINAPI ThreadProc2(PVOID pParam) { // 进入临界区 EnterCriticalSection(g_cs); // 对共享资源进行写入操作 for (int i = 0; i 10; i++) { g_cArray[10 - i - 1] = b; Sleep(1); } // 离开临界区 LeaveCriticalSection(g_cs); return

文档评论(0)

1亿VIP精品文档

相关文档