广西住房和城乡建设厅培训中心网站,商务网站建设公,wordpress登陆phpadmin,wordpress页面评论总线锁
总线锁就是使用处理器提供的一个LOCK#信号#xff0c;当一个处理器在总线上输出此信号时#xff0c;其他处理器的请求将被阻塞住#xff0c;那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁#xff01;#xff01; 如果多个处理器同时对共享变量进行读写…总线锁
总线锁就是使用处理器提供的一个LOCK#信号当一个处理器在总线上输出此信号时其他处理器的请求将被阻塞住那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁 如果多个处理器同时对共享变量进行读写改操作那么共享变量就会被多个处理器同时进行操作这样读写改操作就不是原子的操作完之后共享变量的值会和期望的不一致。
举个栗子如果 i1我们进行两次 i 操作期望的结果是3但是有可能结果是2。 原因可能是多个处理器同时从各自的缓存中读取变量 i分别进行加1操作然后分别写入系统内存中。 那么想要保证读改写共享变量的操作是原子的就必须保证CPU1读改写共享变量的时候CPU2不能操作缓存了该共享变量内存地址的缓存。这时就可以使用总线锁解决问题。 缓存锁
缓存锁指内存区域如果被缓存在处理器的缓存行中并且在Lock操作期间被锁定那么当它执行锁操作回写到内存时处理器不在总线上声言LOCK信号而是修改内部的内存地址并允许它的缓存一致性机制来保证操作的原子性因为缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据当其他处理器回写已被锁定的缓存行的数据时会使缓存行无效。 有的CPU不支持性能比较好 缓存一致性机制
当某块CPU对缓存中的数据进行操作后就通知其他CPU放弃储存在它们内部的缓存或者从主内存中重新读取。
有两种情况下处理器不会使用缓存锁定
当操作的数据不能被缓存在处理器内部或操作的数据跨多个缓存行cache line时则处理器会调用总线锁定。 有些处理器不支持缓存锁定。对于Intel 486和Pentium处理器就算锁定的内存区域在处理器的缓存行中也会调用总线锁定。