首頁 >後端開發 >php教程 >shmop的有关问题

shmop的有关问题

WBOY
WBOY原創
2016-06-13 10:03:491033瀏覽

shmop的问题
是这样的,我在程序中需要频繁处理一段数据,不想每次都向MySQL查询,于是把这些要用的记录取了出来,用shmop放在内存里,方便以后修改。

不过,在写的过程中,我突然想到一个并发控制上的问题,不知道该怎么解决:

function function1(){
读取内存数据
长时间操作(修改了第x1行)
写入内存数据
}

function function2(){
读取内存数据
长时间操作(修改了第x2行)
写入内存数据
}

问题就来了,如果我把function1和function2两函数,从头到尾的用信号量同步,如:
function function1(){
获取信号量
读取内存数据
长时间操作(修改了第x1行)
写入内存数据
释放信号量
}

function function2(){
获取信号量
读取内存数据
长时间操作(修改了第x2行)
写入内存数据
释放信号量
}

那么问题可以解决,但是有违我的初衷,我的初衷是想用缓存加速,但是这样做,长时间操作不能并发执行,这样必然更慢了

如果只在写入或读取的时候同步,如:
function function1(){
获取信号量
读取内存数据
释放信号量

长时间操作(修改了第x1行)

获取信号量
写入内存数据
释放信号量
}

function function2(){
获取信号量
读取内存数据
释放信号量

长时间操作(修改了第x2行)

获取信号量
写入内存数据
释放信号量
}

那么function1如果刚好读完数据,function2写入数据了,function1写入数据时就会擦掉function2写入的数据,function2就白忙活了。。。

很怀恋java Servlet,java Servlet是可以把整个对象保存在内存里,只要能获得对象的引用,修改可以只修改对应行。而php需要把对象序列化以后才能存入内存,要动是整个对象一起动,很麻烦啊。。。

不知道怎么解决,大家讨论讨论?

------解决方案--------------------
去年年底用了一次,导致内存频频出问题,PHP进程死掉,网上一查竟然是WIN XP不支持如销毁等操作。不知道WIN 2003下会不会出现同样的问题。
------解决方案--------------------
反正我操作的时候发现在XP下无法覆盖,销毁内存,只能另外开一个ID重新存储。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn