c++11线程问题组,初学求解答

线程是否可以重用?
线程只能在构造是指定方法吗?
线程运行结束后是什么状态?
线程在windows上构造和析构都要消耗比较大的资源吗?
等待的锁的线程是在哪里?占用cpu吗?
初学并行编程,许多疑惑,越靠前的越要紧。
(写了一个程序在4核上没并行比并行效率高几倍,
并行的方法运算量不算小。编程环境visual studio2012)

4个回答

不知道你说的线程重用是什么意思。线程的代码还是数据?同一个函数完全可以启动出很多线程,每个线程有自己的寄存器和堆栈上下文。好比你的电脑上只有一个word,但是完全可以多开。

线程只能在构造是指定方法吗,当然不是,在线程启动前都可以指定。

线程运行结束后是什么状态,就是stop状态了。

线程在windows上构造和析构都要消耗比较大的资源吗?看怎么理解这个大,一般也就是百把时钟周期吧,比进程创建少多了。几百时钟周期对于如果你一个线程只执行几个指令的极端变态情况来说是很大的。

KFEB4
KFEB4 线程stop状态之后还可以指定其他任务吗?(线程到底是以什么形式,指令集?)
接近 6 年之前 回复
KFEB4
KFEB4 线程可以指定启动?不是构造的时候就启动吗?可以创建一个空的线程吗?
接近 6 年之前 回复

但是实际不可能这样,如果你的线程需要cpu执行1秒,那么创建的开销就相当于百万分之一,多么微不足道(假设你的cpu是ghz级别时钟)

等待的锁的线程是在哪里?占用cpu吗?锁对于x86来说是硬件实现的,不需要占用cpu

写了一个程序在4核上没并行比并行效率高几倍
这个要看你并行代码在总程序中的占比,一个是你程序准备数据和汇总数据以及别的地方未必是并行的,一个是如果你使用了不当的加锁,那么这些代码也不是并行的。

最后,不知道你的cpu是否真的是4核。Intel笔记本的cpu很多是双核超线程的,在任务管理器中看到4个框不假,但是其实是双核。双核+超线程处理器一般大约只有2~2.5x的加速比,这还是假设你的程序全部都是并行的理想情况。
用cpu-z可以看下你的处理器的具体型号,以及拥有几个物理核心。

KFEB4
KFEB4 我的事win8平板,任务管理器里只显示1个cpu的运行状态。驱动精灵里显示是4核,在visual studio2012里的并行堆栈的窗口里可以看到有四个线程正在运行(非等待锁)(其实我对这个运行什么意思并不明白,这可能更程序有关)
接近 6 年之前 回复
KFEB4
KFEB4 我的事win8平板,任务管理器里只显示1个cpu的运行状态。驱动精灵里显示是4核,在visual studio2012里的并行堆栈的窗口里可以看到有四个线程正在运行(非等待锁)(其实我对这个运行什么意思并不明白,这可能更程序有关)
接近 6 年之前 回复

task放入一个任务队列,线程池从队列中抽取任务,干活,如果队列里没有任务,线程池线程等待。

KFEB4
KFEB4 谢谢
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问