c++11多线程以及上锁的简单例子
来源:互联网 发布:2016淘宝网红店铺排名 编辑:程序博客网 时间:2024/06/06 10:38
多线程, 简单的理解就是让我们可以同时做多件事情, 以下为简单例子.
#include <iostream> #include <thread> using namespace std; void first() { cout << "do one thing" << endl; } void second() { cout << "do another thing" << endl; } int main() { thread t1(first); thread t2(second); t1.join(); t2.join(); }
编译命令需要加上 -lpthread 参数
而一般谈到多线程就会涉及到上锁的问题, 为什么要上锁? 是为了线程安全. 比方说我有两个线程, 都要拿到一个唯一的数据(只能被拿一次), 如果不上锁, 那么就很有可能两个线程同时拿, 数据就被拿了两次. 如果我们上锁, 我们就限制了拿的操作在某个时间只能有一个线程做, 如果这个时候其他线程也想做就得等待. 这样就保证了线程安全.
例子:
#include <iostream>#include <mutex>#include <thread>#include <vector>using namespace std;std::mutex mtx;int a = 1;void test() { std::unique_lock<std::mutex> lck(mtx); (这一行就是上锁,去掉就不线程安全了) if(a) { cout << a << endl; a--; } else cout << "nothing" << endl;}int main(void){ std::vector<thread> v; int n = 10; while(n--) v.push_back(thread(test)); for(auto &i: v) i.join();}
这个例子使用了unique_lock锁(还有lock_guard等种类的锁), 我们设置了一个唯一的数a, 它一被拿就马上置0,然后就不能再拿了, 上锁就能实现这样的效果,输出为
1
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
而如果把上锁的那一行注释掉, 可以试一下看看输出, 很明显数a被拿了多次, 都通过了if(a)的判断, 然后输出也就会有本不应该有的负数, 也就不线程安全了.
阅读全文
0 0
- c++11多线程以及上锁的简单例子
- [C#] 一个简单的C#多线程间同步的例子
- 多线程编程的简单例子
- qt多线程的简单例子
- ios多线程的简单例子
- c的简单例子
- pro*c初学2---简单多线程例子
- linux c最简单多线程例子:
- C- 一个多线程的例子
- python多线程上锁
- Pro*c的简单例子
- C# 一个简单的多线程例子
- 一个简单的多线程运用例子
- 一个简单的多线程例子-互斥量
- 一个简单的多线程例子-临界区
- qt多线程一个简单的例子
- 多线程--简单的卖票例子--基础
- C#多线程处理文件的简单例子
- Idea集成SVN,checkout公司项目
- Redux源码拾遗,关于createStore的第三个参数
- Dependency Walker使用说明(对比软件运行与跟踪情况)
- solr的基本使用
- 海康萤石摄像机远程监控机制分析
- c++11多线程以及上锁的简单例子
- HDU 3065 病毒侵袭持续中(AC自动机)
- QUAKE 3源代码评测:架构
- 数组去重的方法
- (二十二) IPC机制通讯
- tensorflow1.1/RNN预测
- bzoj 2301(Mobius)
- 初识Linux多线程编程
- ADXL345加速度计使用心得(带中断唤醒)