码迷,mamicode.com
首页 > 其他好文 > 详细

知识点整理

时间:2014-07-21 08:08:18      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:使用   数据   代码   c   设计   c语言   

 

关于超线程

CPU的超线程简单来讲,就是当一个线程cache miss需要执行访存操作时,访存期间CPU会等待,此时切换到另一个线程执行,避免浪费CPU资源。访存比较慢,超线程的切换设计的很快,号称只要一个CPU周期。

超线程为什么那么快切换,普通线程切换慢因为多个线程使用的东西是一个,比如寄存器,当普通线程切换时,必须将一个线程的值切换成另一个线程的值。而超线程很多东西是独立的(对于软件能看到的东西,对于每一个超线程都是独立的,对于软件看不到的,比如缓存(纯硬件的事情,软件是无法控制的),是否设计的独立,只有CPU设计人知道。),因此超线程切换很快,直接使用另一个超线程的就可以了,不需要寄存器内部数据的切换。

C语言关键字volatile 

编译器编译代码时会进行优化,根据代码上下文判断,某个变量的值没有变,下次使用就会直接使用寄存器里面的值,而不会访存。

但如果两个进程共享一个内存,A进程改,B进程读,B进程,有可能一直读不到正确的数据,因为他一直使用寄存器里面的值。

此时就需要写代码时,加上volatile关键字,告诉编译器不要优化,直接访存而不是拿寄存器的值。

但访存不一定是真的访问内存,有可能直接从缓存中取值,缓存是软件控制不了的(代码无法指定在内存读还是在缓存读),是硬件控制的。

不要以为加上volatile就会强制从内存里面读,他只是告诉编译器不要优化成读寄存器,而是访存,但访存是访内存还是访缓存,就是运行时硬件的事了。

知识点整理,布布扣,bubuko.com

知识点整理

标签:使用   数据   代码   c   设计   c语言   

原文地址:http://www.cnblogs.com/jintianfree/p/3857506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!