C++ 多线程之临界区
来源:互联网 发布:localstorage存储数据 编辑:程序博客网 时间:2024/05/16 12:26
关于C++临界区Critical Sections http://blog.sina.com.cn/s/blog_8eee7fb601012omv.html中将的很清楚了
在多线程中,我们看一下使用CRITICAL_SECTION和不使用CRITICAL_SECTION的差异:
struct MyStruct{int a;int b;};MyStruct s;CRITICAL_SECTION cs;void funcPrint(){int count = 0;while (count < 20){count++;EnterCriticalSection(&cs);cout << s.a << " " << s.b << endl;LeaveCriticalSection(&cs);Sleep(1000);}}void funAdd(){int count = 0;while (count < 20){count++;EnterCriticalSection(&cs);s.a++;Sleep(400); s.b++;LeaveCriticalSection(&cs);Sleep(500);}}int main(){s.a = 0;s.b = 0;InitializeCriticalSection(&cs);std::thread t(funcPrint);std::thread t2(funAdd);t.join(); t2.join();return 0;}
struct MyStruct{int a;int b;};MyStruct s;CRITICAL_SECTION cs;void funcPrint(){int count = 0;while (count < 20){count++;//EnterCriticalSection(&cs);cout << s.a << " " << s.b << endl;//LeaveCriticalSection(&cs);Sleep(1000);}}void funAdd(){int count = 0;while (count < 20){count++;//EnterCriticalSection(&cs);s.a++;Sleep(400); s.b++;//LeaveCriticalSection(&cs);Sleep(500);}}int main(){s.a = 0;s.b = 0;InitializeCriticalSection(&cs);std::thread t(funcPrint);std::thread t2(funAdd);t.join(); t2.join();getchar();return 0;}
没有使用临界区的时候就会在两个线程中操作s时产生混乱。
其中join函数就是链接被调线程与主调线程,在join之后执行的代码都是在被调线程执行完成后才执行。
1 0
- 多线程之临界区、互斥锁
- C++ 多线程之临界区
- 多线程(C++)临界区Critical Sections问题
- 多线程同步之 CriticalSection(临界区)
- 多线程之使用临界区Sample。。
- 多线程同步之 CriticalSection(临界区)
- 说说win32多线程锁之临界区
- 多线程编程之临界区模式
- 多线程编程之临界区的应用
- 多线程同步之CRITICAL_SECTION(临界区)
- win32多线程锁之临界区
- 多线程之临界区的应用
- C++ 多线程之临界区和事件
- C++多线程实例之临界区同步
- 多线程之临界区(Critical Section)
- 多线程之关键段(临界区)
- 多线程编程之临界区的应用
- 多线程编程之临界区的应用
- Android判断网络状态
- B树索引和位图索引
- IOS中使用sskeychain调用keychain(钥匙串)保存密码
- CCF-201412-4 最优灌溉(最小生成树)
- Mibatis 多对多
- C++ 多线程之临界区
- Socket鏈接與Http鏈接的區別
- 原生JS+CSS(CSS3)+HTML实现页面弹框
- LeetCode 34. Search for a Range
- boost的使用
- 数据仓库01
- 【J2SE】——流
- 前端冷知识集锦
- 小数、分数的计算