临界区例子及相关函数翻译
来源:互联网 发布:英雄赞歌 知乎 编辑:程序博客网 时间:2024/06/03 15:09
例子:记录线程调用顺序
#include <windows.h>#include <iostream>#include <vector>using namespace std;#define THREADCOUNT 9CRITICAL_SECTION testCS;DWORD WINAPI ThreadFunc( LPVOID );std::vector<int> orderVec;//记录线程调用顺序int main( void ){HANDLE aThread[THREADCOUNT];DWORD ThreadID;int i;InitializeCriticalSection(&testCS);// Create worker threadsfor( i=0; i < THREADCOUNT; i++ ){aThread[i] = CreateThread( NULL, // default security attributes0, // default stack sizeThreadFunc, //(LPTHREAD_START_ROUTINE) (LPVOID)i, // no thread function arguments0, // default creation flags&ThreadID); // receive thread identifier}Sleep(100);for( i=0; i < THREADCOUNT; i++ )CloseHandle(aThread[i]);int count = orderVec.size();cout << " order of calling thread:";for (int i=0; i<count; ++i){cout << orderVec[i] << ", ";}DeleteCriticalSection(&testCS);system("pause");return 0;}DWORD WINAPI ThreadFunc( LPVOID lpParam ){ //如果不加临界区 vector.push_back操作可能中途被打断 出现错误EnterCriticalSection(&testCS);int i = (int)lpParam;orderVec.push_back(i);LeaveCriticalSection(&testCS);return TRUE; }结果:
order of calling thread:0, 1, 2, 4, 5, 3, 7, 6, 8, 请按任意键继续. . .
InitializeCriticalSection function
初始化一个临界区对象
void WINAPI InitializeCriticalSection(
_Out_ LPCRITICAL_SECTION lpCriticalSection
);
参数
lpCriticalSection [out]
指向临界区对象的指针
注意
单进程中的线程可以使用临界界对象来解决青互斥同步问题。但不保证线程得到临界区对象的顺序,系统公平对待每个线程。进程负责为临界区对象分配内存。即定义一个类型为CRITICAL_SECTION变量。在使用临界区对象之前,进程中的线程必须初始化临界区对象。在临界区对象初始化之后,线程可以使用函数EnterCritical TryEnterCriticalSection或LeaveCriticalSection函数来互斥地访问共享资源。在不同进程中的线程同步,可以使用mutex对象。
临界区对象不能被移动,也不能被复制。进程不能修改临界区对象,但这是不符合逻辑的。只能使用临界区函数管理临界区对象。当你想结束一个临界区对象时,调用DeleteCriticalSection函数。
在重新初始化临界区对象之前,临界区对象必须被删除。初始化一个已经初始化的临界区对象,结果是未知的。
- 临界区例子及相关函数翻译
- 临界区、相关临界区
- 线程临界区相关结构体和函数
- 一个简单的多线程例子-临界区
- 再看copy_on_write缩小临界区的例子
- 临界资源 & 临界区
- 临界段临界区
- 多线程临界区问题及解决方法
- 机器学习基础 维基翻译 典则相关分析 多标签分类 及简单的sklearn例子
- 临界区 函数 semged() semop() semctl()
- DOS符号及相关例子
- ibatis相关例子及注意事项
- 条件变量和临界区的一个例子
- 应用开机启动及相关文档翻译
- Windows Event 的各个相关函数解释 及 简单例子一个
- 消息相关的函数TranslateMessage - 翻译消息
- 临界区
- 临界区
- Android基本的界面组件
- drupal汉化出现An AJAX HTTP error occurred.HTTP Result Code: 200Debugging information follows.
- #pragma DATA_SECTION DSP中的使用
- android开发——用GridView实现省市县三级联动
- 光标定位到输入框文本的尾端
- 临界区例子及相关函数翻译
- boost::filesystem指南
- 部署WebPageTest 2.4版本 私有实例
- 有备份的users表空间的损坏恢复
- oracle sequence cache
- HDOJ 2072 单词数 (set)
- 发布MFC ActiveX控件并实现自动更新
- QTableWidget的使用与美工总结
- Linux下免费数据库PostgreSQL开发入门