<? Php /** * Implementación de la cola de memoria de bucle PHP usando memoria compartida * Admite múltiples procesos, admite el almacenamiento de varios tipos de datos * Nota : poner en cola completa o la operación quitar de la cola, tan pronto como el unset (), para liberar el SHMQueue crítico región * /clase {private $ maxQSize = 0; //máxima longitud de la cola privada frente $ = 0; //puntero de cabecera de la cola $ privada trasera = 0; //puntero de cola de la cola privada $ blockSize = 256; //tamaño de bloque (bytes) $ privada memSize = 25600; //máximo de memoria compartida (byte) $ privada shmid = 0; $ privada filePtr =' ./shmq. ptr '; privado $ semID = 0; función __construct público () {$ ShmKey = ftok (__ FILE__,' t '); $ this- > shmid = shmop_open ($ ShmKey, " C ", 0644, $ this- > memsize); $ this- > maxQSize = $ this- > memsize /$ this- > blockSize; //aplicar un semáforo $ this- > semID = sem_get ($ ShmKey, 1); sem_acquire ($ este - > semID); //solicitar la entrada en la región crítica $ this > init ();} function init privada () {if ($ this file_exists (> filePtr)) {$ contenidos = file_get_contents ( $ this- > filePtr); $ data = explode ('|
', $ contents); if (isset ($ data [0]) &&isset ($ data [1])) {$ this- > front = (int) $ data [0]; $ this- > trasera = (int) $ datos [1];}}} función pública getLength () {return (($ this- > trasera - $ this- > frente + $ this- > memsize)% ($ this- > memSize)) /$ this- > blockSize;} public function enqueue ($ value) {if ($ this- > ptrInc ($ this > trasera) == $ this > frontal) {//fuerza de retorno completo false;} $ data = $ this- > encode (valor $); shmop_write ($ this- > shmid, $ data, $ this- > trasera); $ this- > trasera = $ this- > ptrInc ($ this > trasera); return true;} dequeue función pública () {if ($ this- > delante == $ this > trasera) {//Fuerza retorno vacío falsa;} $ de valor = shmop_read ($ this- > shmid, $ this- > frente, $ this- > blockSize-1); $ this- > frente = $ this- > ptrInc ($ this- > frontal); regreso $ this- > de decodificación (valor $);} función privada ptrInc ($ ptr) {return ($ ptr + $ this- > blockSize)% ($ this- > memsize);} función privada encode (valor $) {$ data = serialize ($ value). " __ eof "; if (st rlen ($ data) > $ this- > blockSize -1) {throw new Excepción (strlen ($ data) y;. quot es el tamaño de bloque de sobrecarga "!);} return $ data;} decodificación función privada (valor $ ) {$ data = explotan (" __ EF ", $ value); unserialize ($ datos [0]) return;} public function __destruct () {$ data = $ this- > delante '|.
'$ This- >. posterior; file_put_contents ($ this- > filePtr, $ data); sem_release ($ this- > SemID); //la región crítica, la liberación de semáforos}}
//*******************************************
muestra usando el siguiente código:
//en el equipo de operación $ shmq = new SHMQueue (); $ data = 'prueba de datos'; $ shmq- > enqueue ($ data); unset ($ shmq); //Dequeue operation $ shmq = new SHMQueue (); $ data = $ shmq- > deQueue (); unset ($ shmq);? ≫
En primer lugar, gracias a los fanáticos y simpatizantes de la comunidad por su atención a Linux Dee
Si ha usado Linux por un tiempo, siente que el disco duro no es suficiente, necesita instalar un nue
Devil-Linux es una distribución especial de Linux para firewalls y enrutadores. El objetivo de Devil
En la actualidad, existe una vulnerabilidad muy grave de Bash en Internet que permite a los piratas
Principio de Rsync y tutoriales básicos
strace comando tutorial de Linux
nginx antirrobo tutorial configuración de cadena
Comandos de actualización y consulta de Linux detalles de chkconfig
Apache reescribir la explicación del elemento de configuración
Configuración de servidor proxy inverso Nginx
Tareas de planificación de Linux Introducción
La implementación del puente de la pila de protocolo de Linux
Sistema de archivos cargando durante el proceso de arranque de Linux
Método para matar comandos de proceso bajo el sistema operativo Linux
No hay controlador en Windows8, no es necesario conducir el asistente para ayudar
El uso del procesador interno Service.exe aumentó a 100%
Cómo configurar e instalar Node.js en el entorno de desarrollo de Ubuntu
¿Cómo usa Windows 8 el grupo familiar?
¿Cómo resolver el error cuando Win7 shutdown?
¿Por qué la pantalla de la computadora Win10 se convierte en una pantalla roja?
El modo Win 7 XP puede detener la ejecución del malware. El modo