Chinaunix

标题: 关于多cpu下的数据同步问题 [打印本页]

作者: baicj    时间: 2008-08-26 09:08
标题: 关于多cpu下的数据同步问题
一般在多线程程序里读写内存数据都是使用
lock();
x=y;
unlock();
这样的模式。
就算是这样加锁了,我还是有点疑惑,在多cpu环境下,x是不是依然存在线程不同步的问题?因为每个cpu使用自己独立的缓存。在cpu A上数据发生变化,在cpu B的缓存里是不是一定能得到更新?
x=y这一条简单语句在linux内核里会做哪些工作?会去处理内存页dirty位之类的东西么?
作者: flw2    时间: 2008-08-26 09:33
原帖由 baicj 于 2008-8-26 09:08 发表
一般在多线程程序里读写内存数据都是使用
lock();
x=y;
unlock();
这样的模式。
就算是这样加锁了,我还是有点疑惑,在多cpu环境下,x是不是依然存在线程不同步的问题?因为每个cpu使用自己独立的缓存。在 ...

其实你的问题就是cache一致性的问题了
等zx_wing给解释一下某个实例
我看过一个文档,挺容易理解的,也可以看看

cache.pdf

380.51 KB, 下载次数: 562


作者: baicj    时间: 2008-08-26 10:53
这个文档不错。原来cache一致性是在硬件上解决的。
对于内存块的读写,加锁就可以解决问题了。
那么像小数据,比如int型数据的内存读写还需要加锁么?因为在cache上已经是一致的了,而且也不存在数据不完整的问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2