- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 c++11多线程编程(八):std::future , std::promise和线程的返回值
std::future对象可以和asych,std::packaged_task,std::promise一起使用。这篇文章集中讨论std::future和std::promise。我们经常会遇到需要得到线程返回结果的情况,现在的问题是我们如何实现。举个例子:假设在程序中,我们创建了一个压缩给定文件夹的线程,并且我们希望该线程能够返回新的zip文件的名称和大小。有两种实现方式:
2017-11-30 15:07:08 17372 9
原创 c++11多线程编程(七):条件变量说明
条件变量条件变量是一种用于在2个线程之间进行信令的事件,一个线程可以等待它得到信号,其他的线程可以给它发信号。在c++11中,条件变量需要头文件:#include 同时,条件变量还需要一个mutex锁条件变量实际上是如何运作的·线程1调用等待条件变量,内部获取mutex互斥锁并检查是否满足条件;·如果没有,则释放锁,并等待条件变量得到发出的信号(线程被阻塞),条
2017-11-23 10:41:38 3624
原创 c++11多线程编程(六):事件处理
本节讨论在多线程环境下的事件处理有时,线程需要等待某事件发生,比如一个条件变为true,或者某任务被另一个线程完成例如,我们创建一个基于网络的应用程序,处理如下的任务:1、与处理器进行一些握手操作;2、从xml文件load数据;3、处理从xml文件load的数据.可以发现,任务1不依赖其他的任务,而任务3则依赖于任务2,这意味着任务1和任务2可以由不同的线程并行运行,以提升
2017-11-23 10:24:00 5531 2
原创 c++11多线程编程(五):使用mutex修复竞争
c++11多线程编程(五):使用mutex修复竞争这节我们讨论怎样使用mutex锁保护多线程环境中的共享数据来避免竞争条件为了修复多线程环境中的竞争条件,我们需要mutex互斥锁,在修改或读取共享数据前,需要对数据加锁,修改完成后,对数据进行解锁。在c++11的线程库中,mutexes在头文件中,表示互斥体的类是std::mutexmutex有两个重要的方法:1.) l
2017-11-17 14:45:42 2238 4
原创 c++11多线程编程(四):数据共享和竞争条件
在多线程环境中,线程间的数据共享很简单,但是在程序中这种简单的数据共享可能会引起问题,其中一种便是竞争条件什么是竞争条件?竞赛条件是发生在多线程应用程序中的一种bug当两个或多个线程并行执行一组操作,访问相同的内存位置,此时,它们中的一个或多个线程会修改内存位置中的数据,这可能会导致一些意外的结果,这就是竞争条件竞争条件通常较难发现并重现,因为它们并不总是出现,只有当两个或多个
2017-11-17 14:36:41 4370 3
原创 c++11多线程编程(三):仔细地将参数传递给线程
要将参数传递给线程的可关联对象或函数,只需将参数传递给std::thread构造函数默认情况下,所有的参数都将复制到新线程的内部存储中看一个例子:给线程传递单个参数#include #include #include void threadCallback(int x, std::string str){ std::cout<<"Passed Number = "<
2017-11-11 15:31:30 8185 2
原创 c++11多线程编程(二):joining和detaching 线程
Joining线程线程一旦启动,另一个线程可以通过调用std::thread对象上调用join()函数等待这个线程执行完毕std::thread th(funcPtr); th.join();看一个例子:主线程启动10个工作线程,启动完毕后,main函数等待他们执行完毕,joining完所有线程后,main函数继续执行#include #include #inc
2017-11-03 14:46:00 3971 1
原创 c++11多线程编程(一):创建线程的三种方法
c++11线程库原始的c++标准仅支持单线程编程,新的c++标准(c++11或c++0x)于2011年发布,引入了新的线程库。编译器要求:Linux: gcc 4.8.1 (完全并发支持)Windows: Visual Studio 2012 and MingW在linux下的编译方法:g++ -std=c++11 sample.cpp -lpthread
2017-11-03 14:45:08 44310 7
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人