单进程单线程的程序,同时能占用1个CPU的1个核,那么单进程多线程的程序,同一时能占用1个CPU的多个核?

单进程的多线程是否能够实现跨cpu核心调度?如果能够,那么一个进程的多个线程访问同一个资源怎么样实现线程同步?是否要实现指令级别的同步?... 单进程的多线程是否能够实现跨cpu核心调度? 如果能够,那么一个进程的多个线程访问同一个资源怎么样实现线程同步? 是否要实现指令级别的同步? 展开
 我来答
poseidon_k
2014-04-16 · TA获得超过2580个赞
知道小有建树答主
回答量:1223
采纳率:0%
帮助的人:314万
展开全部
多线程程序可以同时占用多个核心;
调度CPU核心的任务会由操作系统来完成,程序员只须创建新线程即可;
多线程共享资源时可通过调用操作系统提供的线程同步API来实现线程同步;
windows的Interlocked函数族即为指令级别的同步API
追问
每个CPU核心上都并行的运行线程的指令,怎么提供指令级别的同步呢? 虽然有CAS提供指令级别的同步,但是我觉得这只适合单核cpu。多个cpu核心运行不同的线程,都对同一个变量进行操作,如:cpu1取值,然后改变,cpu2也取值,但是cpu1还没有更改该变量的值,cpu2读取旧值做运算更改,这样怎么同步呢?
追答
多核CPU会提供这样一类指令:当指令访问某一内存地址时,CPU会在总线上维持一个硬件信号,这个信号会阻止其他核心访问同一个内存地址。前面我提到的Interlocked函数族实际上就是运用这类指令实现的。

另外这只是实现线程同步的方法之中的一种,即用户级别的线程同步。这种方法不能将线程切换到等待状态。如果使用这种指令构造一个限制对共享资源访问的临界区,当一个线程试图访问某个已被占有的资源,它会不停地循环检测资源的占有状态,一直占据CPU时间,直到该资源被释放为止。
另外一种线程同步的实现方法时内核级线程同步:当一个线程试图访问共享资源时,会从用户模式切入到内核模式,然后由内核级的操作系统代码检查共享资源的占有状况,如果已被占有,会直接由系统的任务调度器把该线程切换到等待状态,也就是把线程调出CPU核心,什么时候共享资源被释放,什么时候把等待线程切换回准备状态,参加正常的CPU调度。这样就解决了用户级别线程同步的循环查询持续占据CPU时间的问题。
有你的晴天12138
2014-04-16 · TA获得超过1001个赞
知道小有建树答主
回答量:305
采纳率:80%
帮助的人:211万
展开全部
可以实现线程与CPU的绑定,用于将线程均衡地分布在不同的CPU上运行,在Linux下可以实现,Windows的没有试过。
另外,线程间访问同一个资源需要使用临界区(CRITICAL_SECTION), 它是实现同一进程下不同线程间的对资源互斥访问的方法。主要函数有:InitializeCriticalSection, DeleteCriticalSection, EnterCriticalSection, LeaveCriticalSection. 可以查阅MSDN了解每个函数的详细用法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式