小米的一个c++面试题

大王叫我来巡山 发布于 2013/12/18 23:59
阅读 5K+
收藏 6
c++

倒在这个面试题上,郁闷。。。。

有3个类,class A, class B(线程类), class C(线程类)

大概是这样的。

class B : public Thread

{

        int i = 0;

        while(i < 1000)

        {

              i++;

              //这里需要把 i 传到A类去,不能用new A的方式,因为不能重复执行A类的构造函数。

        }

}


class C : public Thread

{

        int i = 0;

        while(i < 1000)

        {

              i++;

              //这里需要把 i 传到A类去,不能用new A的方式,因为不能重复执行A类的构造函数。

        }

}

class A

{

        public:

            int fromB(int _bi);

            int fromC(int _ci);

            int Add(int bi, int _ci);

}

B类线程和C类线程同时执行,假定一种环境,B类里while循环是i为1的时候,传给A类,C类里while循环是i为1的时候,传给A类,那么这个时候A类里执行Add,就是把B类传过来的i和C类传过来的i相加,也就是等于2。


请问该如何实现?

加载中
0
小保哥
小保哥
把i传到A类去是什么意思?你是想表达把i的值传到某个具体的A类型对象中去吗?如果是,这个A类对象是个什么样的存在?
大王叫我来巡山
大王叫我来巡山
可能我没有描述清楚,其实可以理解成为缓冲队列的概念,线程间数据交换
0
修改登录密码
修改登录密码
听不懂。。。外星语言?
0
修改登录密码
修改登录密码
用指针不是很方便么?
0
公孙二狗
公孙二狗
这个就是一个共享资源的问题,可以给A用Singleton的办法做,或者创建一个A的对象,把这个对象同时传给B and C的对象,如果学习过生产者,消费者的例子那就很好理解了。
0
newzai
newzai
Barrier了。或者是陈硕Linux 多线程服务器端编程提到的 CountDownWatch
0
0
mental
mental
如果小米的题目真是的这样,只能 呵呵 了
0
robinwei
robinwei

引用来自“mental”的答案

如果小米的题目真是的这样,只能 呵呵 了
别呵呵,给个答案啊!!!
0
mental
mental
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
ling0
ling0

看你的描述应该是要达到 1+1, 2+2,,, N+N 这样的效果。

如果是这样的话,这是生产者消费者问题, 两个生产者一个消费者。

B,C 传给 A 数据之后,一直阻塞,直到 A 的方法正常调用后,B,C 才能继续传数据给 A 。

A 得不到数据时也一直阻塞,当 B, C 只有一个或没有给 A 传数据时,调 A 则 A 一直阻塞到两个数据到达。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部