线程同步技术, windows
原子锁
APi
InterLockedIncrement(1个参数)
InterLockedDecrement(1个参数)
临界区
VOID 初始化一个临界区
void initializeCriticalSection(
LPCRITTICAL_SECTION lpCriricalSection // 临界区变量
)
进入临界区
VOID EnterCriticalSection(
LPCRITICAL_SECTION lpCriricalSection // 临界区
)
离开临界区
VOID DeleteCriticalSection(
LPCRITICAL_SECTION lpCriricalSection // 删除临界区.
)
互斥:
当互斥锁不被枷锁时,有信号,当互斥锁上时,无信号.
创建互斥
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
// 安全属性
BOOL bInitalOwner, // 初始的拥有者,FALSE创建时没有线程拥有互斥.
LPCTSTR lpName // 命名
等候互斥
WaitFor....
3 释放互斥
BOOL ReleaseMutex(
HANDLE hMutex // handle tomutex
)
)
4. 关闭句柄.
5. 打开互斥锁
OpenMutex 通过名称返回互斥句柄
事件
创建事件
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // SD
BOOL bManualReset, // true手动将信号转变为无信号
// false,自动设置复位
BOOL bInitialState, // false 初始状态无信号
LPCTSTR lpName // object name
);
等候时间
将事件设置成有信号状态
BOOL SetEvent(hEvent)
将事件设置成无信号状态
BOOL ResetEvent(hEvent);
关闭事件
CloseHandle();
信号量
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount, // 初始化信号量数量3
LONG lMaximumCount, // 信号量的最大值 ?? 10
LPCTSTR lpName // 命名
);
创建成功返回信号量句柄
等候信号量
给信号量指定新值
BOOL ReleaseSemaphore( HANDLE hSemaphore, // 信号量
LONG lReleaseCount, // count increment amount // 指定新值.
LPLONG lpPreviousCount // previous count // 可以为NULL
);
可等候定时器
等候函数:
WaitForMultipleObjects - 等候多个
DWORD WaitForMultipleObjects(
DWORD nCount, // 句柄数量
CONST HANDLE *lpHandles, // 句柄数组
BOOL fWaitAll, // true 等待所有句柄都有信号时返回,false 有一个有信号就返回
DWORD dwMilliseconds // 超时时间INFINITE 代表永远
);
返回值是有信号耳朵句柄在数组里的下标.
原子锁
APi
InterLockedIncrement(1个参数)
InterLockedDecrement(1个参数)
临界区
VOID 初始化一个临界区
void initializeCriticalSection(
LPCRITTICAL_SECTION lpCriricalSection // 临界区变量
)
进入临界区
VOID EnterCriticalSection(
LPCRITICAL_SECTION lpCriricalSection // 临界区
)
离开临界区
VOID DeleteCriticalSection(
LPCRITICAL_SECTION lpCriricalSection // 删除临界区.
)
互斥:
当互斥锁不被枷锁时,有信号,当互斥锁上时,无信号.
创建互斥
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
// 安全属性
BOOL bInitalOwner, // 初始的拥有者,FALSE创建时没有线程拥有互斥.
LPCTSTR lpName // 命名
等候互斥
WaitFor....
3 释放互斥
BOOL ReleaseMutex(
HANDLE hMutex // handle tomutex
)
)
4. 关闭句柄.
5. 打开互斥锁
OpenMutex 通过名称返回互斥句柄
事件
创建事件
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // SD
BOOL bManualReset, // true手动将信号转变为无信号
// false,自动设置复位
BOOL bInitialState, // false 初始状态无信号
LPCTSTR lpName // object name
);
等候时间
将事件设置成有信号状态
BOOL SetEvent(hEvent)
将事件设置成无信号状态
BOOL ResetEvent(hEvent);
关闭事件
CloseHandle();
信号量
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount, // 初始化信号量数量3
LONG lMaximumCount, // 信号量的最大值 ?? 10
LPCTSTR lpName // 命名
);
创建成功返回信号量句柄
等候信号量
给信号量指定新值
BOOL ReleaseSemaphore( HANDLE hSemaphore, // 信号量
LONG lReleaseCount, // count increment amount // 指定新值.
LPLONG lpPreviousCount // previous count // 可以为NULL
);
可等候定时器
等候函数:
WaitForMultipleObjects - 等候多个
DWORD WaitForMultipleObjects(
DWORD nCount, // 句柄数量
CONST HANDLE *lpHandles, // 句柄数组
BOOL fWaitAll, // true 等待所有句柄都有信号时返回,false 有一个有信号就返回
DWORD dwMilliseconds // 超时时间INFINITE 代表永远
);
返回值是有信号耳朵句柄在数组里的下标.