w**********k 发帖数: 1135 | 1
日本国也不是我们建立的啊。
我问你们一个问题吧,如果你们能够回答出来,至少我答应建板 :-)
(本站目前的建板规则是,如果任何一个站长不同意,就不建板)
在Linux里面,共享内存的共同写问题是如何保证的?举个例子如下:
int i=0 ;
i是在共享内存里面的,进程a 的程序如下:
if( !i )
i=1 ;
进程b的程序如下:
if( !i )
i=2 ;
有可能会出现这样的情况,当进程a给i赋值时,进程b判断出i==0,
也对它进行赋值。
谁能告诉我这种情况如何避免,thanks a lot. | m*****e 发帖数: 4193 | 2
^^^^^^^^^^^^^^^^^^
I don't think so. Right is right and wrong is wrong.
To be right doesn't need to be complicated, so why not
be right?
没有支持是一回事,对不对是另一回事。我确实对Linux提供了哪些进程同步不大清楚,
但是肯定是有的,前面Xentar也列出了一些。
也许别的地方是这样,但不是这里。这不是优不优的问题,而是对不对的问题。这里有
一个Linux Traffic上面的讨论,有兴趣可以看一看。
spin_unlock() Optimization On Intel
1999/11/20 - 12/07 (143 posts): spin_unlock optimization(i386)
http://kt.linuxcare.com/kt19991220_47.html#1 | C*****e 发帖数: 13 | 3 Maybe wrong, just according to my knowledge.
Shared memory is not syncronized autmatically. You should use some
other kernel routines to avoid collision, like semopher operations.
Because semctl and semget is in kernel mode, the internal data is not
protected in traditional single CPU kernel. In multi-CPU mode, these
internal data maybe "hotspot" by several CPUs, so the kernel uses
spinlocks to protect them. The spinlocks usually use hardware syncronization
mechenism to keep syncronized. In X86
【在 w**********k 的大作中提到】 : : 日本国也不是我们建立的啊。 : 我问你们一个问题吧,如果你们能够回答出来,至少我答应建板 :-) : (本站目前的建板规则是,如果任何一个站长不同意,就不建板) : 在Linux里面,共享内存的共同写问题是如何保证的?举个例子如下: : int i=0 ; : i是在共享内存里面的,进程a 的程序如下: : if( !i ) : i=1 ; : 进程b的程序如下:
|
|