windows线程同步的几种方法
来源:互联网 发布:数据分析入门书籍推荐 编辑:程序博客网 时间:2024/05/21 10:56
线程同步技术, 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 代表永远
);
返回值是有信号耳朵句柄在数组里的下标.
0 0
- windows线程同步的几种方法
- Windows 下的几种线程同步方法
- 实现线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- 线程同步的几种方法
- 线程同步的几种方法
- C#线程同步的几种方法
- 线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- 服务器请求响应原理
- JAVA关键字static、final总结
- 十六进制转换为二进制
- 嵌入式开发之linux基础第五天学习笔记 Linux网络相关
- 芯片 SIM3U164
- windows线程同步的几种方法
- 2016/10/24
- js中every、filter、forEach、map和some迭代法 — 第5.2.8节
- 优化UITableViewCell高度计算的那些事
- Android PopupWindow背景半透明兼容方案
- 新手网站
- [Linux C编程]有名管道实现守护进程
- 比较显式调用构造函数和析构函数
- iOS开发 图片选择器、图片多选功能的实现