c++ 多线程设计

c++多线程设计,不知道为什么用多线程以后,线程函数中的两个函数运行时间变慢了。致使总时间增加了,请高手指点哈!!!!... c++多线程设计,不知道为什么用多线程以后,线程函数中的两个函数运行时间变慢了。致使总时间增加了,请高手指点哈!!!! 展开
 我来答
bd_is_s_b
2013-07-31 · TA获得超过487个赞
知道小有建树答主
回答量:64
采纳率:0%
帮助的人:74.9万
展开全部

我给几点意见:

  1. 多线程设计,不分你是何种语言,是硬件支持以及操作系统实现调度过程的。

  2. CPU的硬件特性决定了同一个时间片内,只允许一个线程在CPU内运行,如果你多个线程都有抢占CPU的特性,那么,CPU要在不同线程中切换(切换过程会引发相关的环境切换,也就是要做很多费时间的操作),如果频繁的切换,就会造成程序运行效率低下。

  3. 如果你的对你所使用的语言已经比较熟悉(这是实验的基础),建议你看操作系统原理相关的书籍,这不属于C++语言的范围。你也可以直接看基于某个系统下有针对性的多线程书籍,如《Win32多线程程序设计》,《linux多线程程序设计》这样的书籍。

  如有疑问,可以追加问题,欢迎采纳。谢谢!

追问

上面是两个线程,一个是向缓冲区中放入数据,另一个是从缓冲区中取出数据进行处理。

这个是存放数据的线程函数。

这一个是从缓冲区中取出数据并处理的线程函数。

测试了一些,就是因为红线(处理数据函数)标记的函数处理时间变长了,原先顺序执行的话,是2.5毫秒左右,线程编程5毫秒左右了。缓冲区用了临界区进行互斥访问。其他地方没有互斥访问。

别人说是不是线程来回切换造成的。这个我也不知道。还请指点。谢了

追答
1.在你贴上来的代码中,我只看到了第一个图片上面有m_Mutex这个互斥量,并且不清楚这个互斥量有没有传到你所使用的读写数据的线程当中。
2.你说的缓冲区用了临界区进行互斥访问,这样的同步操作就会发生一个线程需要等待另一个线程的情况,有可能使本来2.5毫秒可以完成的工作变成5毫秒才完成。互斥会浪费多少时间要看你在互斥的时间长短。
3. 线程切换是需要时间,这是肯定的。线程切换是否是占主要时间,需要你在代码中做时间记录测试了。
4. 但直接测试线程切换的时间是很难准确的,但你可以通过测试互斥操作等待时间,如果互斥操作时间不是主要因素,那么线程切换就是主要因素了。
huwei38220
2013-07-31
知道答主
回答量:68
采纳率:0%
帮助的人:93.3万
展开全部
这个你可以想象一下电脑的CPU工作原理就明白,还有就是WINDOWS系统,为了同时可以跑起来多个功能,肯定不会在乎多的那点点时间,也多不了多少
追问
但是多了几乎20秒时间,顺序执行才需要40秒,现在就需要一分钟了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yb0319
2013-07-31 · TA获得超过188个赞
知道小有建树答主
回答量:590
采纳率:0%
帮助的人:282万
展开全部
多线程一样要占用CPU时间,变慢很正常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dry_land
2013-07-31 · TA获得超过303个赞
知道小有建树答主
回答量:349
采纳率:0%
帮助的人:157万
展开全部
楼主,建议你阅读《提问的智慧》并背诵全文。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式