C++多线程与临界资源实例
2015-06-14 10:26
183 查看
在C++中引入thread头文件可以很容易地实现多线程。
引入头文件后,我们需要将每一个线程写成函数的形式。如示例中的inc()与dec()函数。
之后我们通过线程类的初始化就可以很容易地创建并运行线程。
注意:在主线程中,我们需要用thread.join() 来阻塞等待结束每一个线程。否则主线程提前结束程序会出错。
下面是这个示例中完整的代码,代码中模拟了线程对临界资源的操作。不同的运行,num的值可能会不一样。这在我们的实际的编程中要注意。
如有遗漏,欢迎留言补充。转载请注明出处
#include <thread>
引入头文件后,我们需要将每一个线程写成函数的形式。如示例中的inc()与dec()函数。
void inc() { int time = TIME; while(time--) { num++; } } void dec() { int time = TIME; while(time--) { num--; } }
之后我们通过线程类的初始化就可以很容易地创建并运行线程。
std::thread t1(inc); std::thread t2(dec);
注意:在主线程中,我们需要用thread.join() 来阻塞等待结束每一个线程。否则主线程提前结束程序会出错。
下面是这个示例中完整的代码,代码中模拟了线程对临界资源的操作。不同的运行,num的值可能会不一样。这在我们的实际的编程中要注意。
#include <thread>
#include <iostream>
#define TIME 1000000
int num = 0;
void inc() { int time = TIME; while(time--) { num++; } } void dec() { int time = TIME; while(time--) { num--; } }
int main()
{
std::thread t1(inc);
std::thread t2(dec);
std::cout << "thread begin" << std::endl;
t1.join();
t2.join();
std::cout << "The num is : " << num << std::endl;
return 0;
}
如有遗漏,欢迎留言补充。转载请注明出处
相关文章推荐
- C++关于变量名的解析
- C语言编译过程简介
- C语言中的指针-记录个人理解
- STL控件的使用
- c++ 头文件<cstring>(或者string.h)中的常见函数的实现!
- chapter12test6
- 一起talk C栗子吧(第十五回:C语言实例--双向链表)
- c++ 在控制台里用字符拼成图片
- C++11特性(01)auto关键字
- C++ I/O
- C++对象模型之RTTI的实现原理
- c/c++与java------之JNI学习(一)
- C/C++中问号冒号表达式的陷阱
- poj1062昂贵的聘礼有等级限制的最短路径
- 《C++Primer》读书笔记--异常处理
- 【C++ Primer Plus 9.2】 存储持续性、作用域和链接性
- c++学习
- C语言使用正则表达式
- C++为什么要设计友元函数和友元类
- C++为什么要设计友元函数和友元类