75.5 Códigos de errores de lenguajes de programación
76.3.3 Convenciones de código de proyectos
• Estándares de codificación de GNU • Guía de estilo para codificación en Mozilla • Guía de estilo para el núcleo Linux • Guía de estilo para el código de NetBSD
Eventos del ratón
Un evento del ratón es una acción realizada por el usua- rio de una interfaz de usuario utilizando el ratón de computadora(mouse). La interpretación de estas accio- nes mediante software desarrollado para ello, permite ejecutar unafunciónasociada a dicha acción.
Algunos ejemplos de eventos de ratón son:
• mouse over: se produce cuando elcursoro puntero del ratón se encuentra por encima de una determi- nada zona.
• mouse out: se produce cuando el cursor abandona
una determinada zona.
• mouse clicked: se produce cuando se pulsa un botón
del ratón.
• mouse double-clicked: se produce cuando se pulsa
dos veces en un intervalo pequeño de tiempo un mis- mo botón del ratón.
La programación de los eventos del mouse se lleva a cabo mediante llamadas a rutinas específicas que se ejecutan cuando se produce una acción. Además, la acción que se llevará a cabo será diferente dependiendo de en qué par- te de la pantalla se sitúe este, por ejemplo, si se pulsa el botón izquierdo y el puntero está en una parte externa a una aplicación, no ocurrirá nada, pero si por el contrario, en puntero se encuentra sobre un área que contiene un botón, al pulsar sobre el ratón se deberá ejecutar la rutina asociada a ese botón.
77.1 Véase también
• Clic (informática) • Doble clic
Capítulo 78
Exclusión mutua (informática)
Losalgoritmosde exclusión mutua (comúnmente abre- viada como mutex por mutual exclusion) se usan en
programación concurrentepara evitar el ingreso a sus sec- ciones críticas por más de un proceso a la vez. Lasección críticaes el fragmento de código donde puede modificar- se un recurso compartido.
La mayor parte de estos recursos son las señales, conta- dores, colas y otros datos que se emplean en la comuni- cación entre el código que se ejecuta cuando se da servi- cio a unainterrupcióny el código que se ejecuta el resto del tiempo. Se trata de un problema de vital importan- cia porque, si no se toman las precauciones debidas, una interrupción puede ocurrir entre dos instrucciones cua- lesquiera del código normal y esto puede provocar graves fallos.
La técnica que se emplea por lo común para conseguir la exclusión mutua es inhabilitar lasinterrupcionesdurante el conjunto de instrucciones más pequeño que impedi- rá la corrupción de la estructura compartida (la sección crítica). Esto impide que el código de la interrupción se ejecute en mitad de la sección crítica.
En un sistemamultiprocesadorde memoria compartida, se usa la operación indivisibletest-and-setsobre una ban- dera, para esperar hasta que el otro procesador la despeje. La operación test-and-set realiza ambas operaciones sin liberar el bus de memoria a otro procesador. Así, cuando el código deja la sección crítica, se despeja la bandera. Esto se conoce comospin lockoespera activa.
Algunos sistemas tienen instrucciones multioperación in- divisibles similares a las anteriormente descritas para ma- nipular laslistas enlazadasque se utilizan para las colas de eventos y otrasestructuras de datosque lossistemas operativosusan comúnmente.
La mayoría de los métodos de exclusión mutua clásicos intentan reducir la latencia y espera activa mediante las colas ycambios de contexto. Algunos investigadores afir- man que las pruebas indican que estos algoritmos espe- ciales pierden más tiempo del que ahorran.
A pesar de todo lo dicho, muchas técnicas de exclu- sión mutua tienen efectos colaterales. Por ejemplo, los
semáforospermiten interbloqueos (deadlocks) en los que un proceso obtiene un semáforo, otro proceso obtiene el
semáforo y ambos se quedan a la espera de que el otro proceso libere el semáforo. Otros efectos comunes inclu- yen laInanición, en el cual un proceso esencial no se eje- cuta durante el tiempo deseado, y la inversión de priori-
dades, en el que una tarea de prioridad elevada espera por
otra tarea de menor prioridad, así como la latencia alta en la que la respuesta a las interrupciones no es inmediata. La mayor parte de la investigación actual en este campo, pretende eliminar los efectos anteriormente descritos. Si bien no hay un esquema perfecto conocido, hay un in- teresante esquema no clásico de envío de mensajes entre fragmentos de código que, aunque permite inversiones de prioridad y produce una mayor latencia, impide los inter- bloqueos.
Algunos ejemplos de algoritmos clásicos de exclusión mutua son:
• Elalgoritmo de Dekker.
• Elalgoritmo de Peterson.
78.1 Véase también
• Cierre de exclusión mutuao locks
• Semáforo(inventado porEdsger Dijkstra)
• Monitor (concurrencia)(inventado por C. A. R. Hoare) (sin interbloqueos)
Expresión regular
Una expresión regular, a menudo llamada también re-
gex, es una secuencia de caracteres que forma un patrón
de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones. Por ejemplo, el grupo formado por las ca- denas Handel,Händely Haendel se describe con el patrón “H(a|ä|ae)ndel”. La mayoría de las formalizaciones pro- porcionan los siguientes constructores: una expresión re- gular es una forma de representar a loslenguajes regula- res(finitos o infinitos) y se construye utilizandocaracteres
delalfabetosobre el cual se define ellenguaje.
En informática, las expresiones regulares proveen una manera muy flexible de buscar o reconocer cadenas de texto.
79.1 Construcción de expresiones
regulares
Específicamente, las expresiones regulares se construyen utilizando los operadoresunión,concatenaciónyclausura de Kleene. Toda expresión regular tiene algún autómata finito asociado.
Alternación Una barra vertical separa las alternativas.
Por ejemplo,“marrón|castaño”se corresponde con
marrón o castaño.
Cuantificación Un cuantificador tras un carácter espe-
cifica la frecuencia con la que éste puede ocurrir. Los cuantificadores más comunes son ?, + y *:
? El signo de interrogación indica que el carácter
que le precede puede aparecer como mucho una vez. Por ejemplo, “ob?scuro”se corres- ponde con oscuro y obscuro.
+ El signo más indica que el carácter que le prece-
de debe aparecer al menos una vez. Por ejem- plo,“ho+la”describe el conjunto infinito hola,
hoola, hooola, hoooola, etcétera.
* El asterisco indica que el carácter que le prece-
de puede aparecer cero, una, o más veces. Por ejemplo,“0*42”se corresponde con 42, 042,
0042, 00042, etcétera.
Agrupación Los paréntesis pueden usarse para definir
el ámbito y precedencia de los demás operadores. Por ejemplo, "(p|m)adre”es lo mismo que “pa- dre|madre”, y "(des)?amor”se corresponde con
amor y con desamor.
Los constructores pueden combinarse libremente dentro de la misma expresión, por lo que“H(ae?|ä)ndel”equivale a “H(a|ae|ä)ndel”.
Lasintaxisprecisa de las expresiones regulares cambia según las herramientas y aplicaciones consideradas, y se describe con más detalle a continuación.