Foros del Web » Programando para Internet » PHP »

Shared Memory

Estas en el tema de Shared Memory en el foro de PHP en Foros del Web. Saludos! Estoy tratando de hacer una inserción en memoria con shared memory, lo que intento es que se cree el espacio en memoria y luego ...
  #1 (permalink)  
Antiguo 05/06/2014, 10:13
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Shared Memory

Saludos!

Estoy tratando de hacer una inserción en memoria con shared memory, lo que intento es que se cree el espacio en memoria y luego se intercambie entre 1 y 0, pero algo está fallando.

Código PHP:
// abro el espacio 0xff3 de 8 bits, si no existe lo crea
$shm_id shmop_open(0xff3"c"07778);
if (!
$shm_id) die("No se pudo acceder la memoria");
// leo el valor de esta posicion
$shmr shmop_read($shm_id00);
echo 
"[reading:$shmr]";
// si el valor es 1 lo cambio por 0, y si es 0 lo cambio por 1, y guardo el resultado.
$shmw=($shmr)?shmop_write($shm_id"0"0):$shmw=shmop_write($shm_id"1"0);
die(
"[writing:$shmw]"); 
La primera vez que lo ejecuto devuelve esto:
[reading:][writing:1]

ya que está recién creado no hay salida, y luego se escribe 1, hasta aquí todo bien.

La segunda vez que lo ejecuto queda como:
[reading:0][writing:1]

y aquí está el problema, lee un 0 siendo que he escrito un 1, si vuelvo a ejecutarlo vuelve a quedar en 0, siendo que sigo escribiendo 1.

Que estoy haciendo mal? :(
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #2 (permalink)  
Antiguo 05/06/2014, 16:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Shared Memory

$shmr = shmop_read($shm_id, 0, 0);

El último parámetro es la cantidad de bytes a leer, por ahí podría estar el fallo.

Si quieres hacer la prueba más extensa y luego ir simplificando/adaptando a tus necesidades, puedes basarte en el ejemplo del manual: http://www.php.net/manual/es/shmop.examples-basic.php
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 06/06/2014, 07:21
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: Shared Memory

Gracias triby, he agregado el shmop_size, aún así no me resulta...

También encontre un error en la asignación al final, aquí he corregido ambos errores:

Código PHP:
Ver original
  1. // abro el espacio 0xff3 de 8 bits, si no existe lo crea
  2. $shm_id = shmop_open(0xff3, "c", 0777, 8);
  3. if (!$shm_id) die("No se pudo acceder la memoria");
  4. $shm_size = shmop_size($shm_id);
  5. // leo el valor de esta posicion
  6. $shmr = shmop_read($shm_id, 0, $shm_size);
  7. echo "[reading:$shmr]";
  8. // si el valor es 1 lo cambio por 0, y si es 0 lo cambio por 1, y guardo el resultado.
  9. $shmw=($shmr)?shmop_write($shm_id, "0", 0):shmop_write($shm_id, "1", 0);
  10. die("[writing:$shmw]");

Sin embargo sigue entregando la misma salida una y otra vez....
[reading:0][writing:1]

Me habré metido en un callejón sin salida?
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 06/06/2014, 17:53
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Shared Memory

Al parecer falla alguna validación y la forma de escribir el nuevo valor, con tu código siempre obtenía cero en la lectura, prueba esto:

Código PHP:
Ver original
  1. <?php
  2.     // abro el espacio 0xff3 de 8 bits, si no existe lo crea
  3.     $shm_id = shmop_open(0xff3, "c", 0777, 8);
  4.     if (!$shm_id) die("No se pudo acceder la memoria");
  5.     $shm_size = shmop_size($shm_id);
  6.     // leo el valor de esta posicion
  7.     $shmr = shmop_read($shm_id, 0, $shm_size);
  8.     // Validación previa
  9.     if($shmr === false) {
  10.         echo "[No se puede leer]";
  11.         $shmr = 0;
  12.     } else {
  13.          echo "[size:$shm_size][reading:$shmr]";
  14.     }
  15.     // si el valor es 1 lo cambio por 0, y si es 0 lo cambio por 1, y guardo el resultado.
  16.     $val = ($shmr == 0) ? 1 : 0;
  17.     $shmw=shmop_write($shm_id, "$val", 0);
  18.     echo "[writing:$shmw][val:$val]";

Con eso si alterna los valores cero y uno entre cada lectura.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 11/06/2014, 09:50
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: Shared Memory

what?

funciona!

no entiendo por que pero funciona, al parecer el problema estaba en la asignación de $shmw

Gracias por la ayuda!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: memory, shared
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:13.