当前搜索:

boost库在工作(18)线程之三

前面的例子里, 由于cout输出并不是多线程安全的,如果多个线程同时输出,可能导致死锁的出现,因此在那个函数添加了一个boost::mutex锁,以便同步多个输出的线程,这样就不会造成死锁了。在这个函数里,还使用一个类boost::lock_guard,这个类是一个自动锁的类,所谓的自动锁,就是在构造函数里调用上锁函数,在析造函数里调用解锁函数,这样在这个类boost::lock_guard声明的...
阅读(3018) 评论(1)

boost库在工作(17)线程之二

前面的例子,还是过于简单,只能学会使用一个线程来调用一个函数来运行。接着下来,我们提高一点要求,使用两个或两个以上的线程来运行同一个函数。多个线程运行同一个函数,其实就是线程池的概念,因为一个线程只能在一个CPU在里运行,如果有四个CPU,那么最高效率就是有八个线程运行,一般来说是CPU的个数的两倍是最高效率的线程模型。因此,我们开发的软件会在不同的客户电脑上运行,不同的客户那里的电脑配置又不一样...
阅读(4080) 评论(0)

boost库在工作(16)线程之一

学习线程,得先了解线程是什么,线程就是程序执行中运行的最小单元,其实它就是一种轻量的进程,运行的效果跟进程一样,但它的创建和删除比进程要快得多。在现代的操作系统里,都是以线程作为最小的调度单位。在任何一个程序里,都至少有一个线程在运行的,如果没有线程,这个程序是没有办法执行起来。因此,线程就相当汽车里的发动机,如果汽车没有发动机,就没有动力输出,也就没有办法跑起来。因而,线程也与发动机一样是重要,...
阅读(2756) 评论(0)

boost库在工作(15)绑定器与函数对象之三

前面已经可以优美地解决两个参数的函数给算法for_each调用了,但是又会遇到这样的一种情况,当需要三个参数或者三个以上的参数给算法for_each调用呢?从STL里的绑定器bind1st,显然是不行了,因为它最多只支持两个参数,那还有什么办法呢?这时就需要使用boost库里强大的绑定器bind了。它不仅适用的情况比STL库里的多,还更加方便,更加人性化。下面就来看看怎么样绑定三个参数的类成员函数...
阅读(2388) 评论(0)

boost库在工作(14)绑定器与函数对象之二

在STL库里使用算法for_each可以实现容器里每个元素都进行运算的操作,但for_each要求函数对象只能接收一个参数,如果需要传入两个函数时,就需要使用绑定器了。下面设想有这么一个需求,学校里老师给软件开发人员提了一个需求,要求把学生的数学成绩计算平均分,最后还需要计算每个人成绩跟平均分的差距,以便让每个学生看到自己成绩的好与坏。面对这个需求,就可以使用STL里的算法实现如下://使用bin...
阅读(2194) 评论(0)

boost库在工作(13)绑定器与函数对象之一

有一天,有一个同事过来问我,有没有办法把两个参数变成一个参数,然后传送给STL的算法模板使用。我想了一下,要把两个参数变成一个参数,只有一个办法,就是使用绑定器。其实绑定器就是把两个或两个以上的参数变成一个参数,也就是变成函数对象的方式。在STL模板库里提供两个绑定器:bind1st和bind2nd,这两个绑定器只支持两个参数,如果是两个以上的参数,就无能为力了。下面先来看看这两个绑定器的使用例子...
阅读(2562) 评论(0)

boost库在工作(12)引用计数的智能指针intrusive_ptr

当我们在维护旧代码时,很多情况是身不由己的,想从头来开发,又需要时间过多,投入成本过多,老板当然不愿意。想继续使用旧的代码,又需要投入过多的维护成本。要想在这种情况下,提高代码的维护性,又减少出错,因而想引入智能指针管理。比如已经存在引用计数的对象时,如果再想使用智能指针shared_ptr来管理,显然达不目标了,那么怎么办呢?就这样放弃智能指针的使用吗?显然不行,有没有更好的方法呢?在boost...
阅读(4069) 评论(0)
    个人资料
    • 访问:5898479次
    • 积分:76235
    • 等级:
    • 排名:第22名
    • 原创:1624篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2102条
    文章存档