<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>exclusión archivos - Frexus</title>
	<atom:link href="https://www.frexus.dev/tag/exclusion/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.frexus.dev/tag/exclusion/</link>
	<description>Generando Valor Agreado</description>
	<lastBuildDate>Tue, 09 Jan 2024 17:54:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.frexus.dev/wp-content/uploads/2024/03/cropped-Captura-de-Pantalla-2022-12-26-a-las-15.52.42-32x32.png</url>
	<title>exclusión archivos - Frexus</title>
	<link>https://www.frexus.dev/tag/exclusion/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">215529362</site>	<item>
		<title>Exclusión, sincronización y región</title>
		<link>https://www.frexus.dev/post/exclusion-programacion-concurrente/</link>
					<comments>https://www.frexus.dev/post/exclusion-programacion-concurrente/#respond</comments>
		
		<dc:creator><![CDATA[Alfredo de Jesús Gutiérrez]]></dc:creator>
		<pubDate>Mon, 04 Sep 2023 17:39:00 +0000</pubDate>
				<category><![CDATA[post]]></category>
		<category><![CDATA[exclusión]]></category>
		<category><![CDATA[programación concurrente]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.frexus.dev/?p=2390</guid>

					<description><![CDATA[<p>La programación concurrente, esencial en entornos de desarrollo modernos, involucra la ejecución simultánea de múltiples hilos o procesos para mejorar la eficiencia y la capacidad de respuesta de un programa. Conceptos clave como la exclusión mutua, las regiones críticas y la sincronización juegan un papel fundamental. La exclusión mutua asegura que solo un hilo acceda a un recurso compartido en un momento dado, evitando así condiciones de carrera y garantizando la coherencia de los datos. Las regiones críticas, por su parte, son secciones de código donde se accede y modifica información compartida, y se implementan para garantizar que estas operaciones críticas se realicen de manera atómica, sin interferencia de otros hilos. La sincronización, coordina la ejecución de hilos para evitar conflictos y lograr un comportamiento predecible, utilizando mecanismos como cerrojos, variables de condición y semáforos. Estos conceptos son esenciales para desarrollar aplicaciones robustas y eficientes en entornos concurrentes. A continuación se muestra unos ejemplos Ejemplo de exclusión mutua Supongamos que se tiene una variable global compartida llamada contador. Se quiere garantizar que varios hilos puedan incrementar este contador sin que se pierdan actualizaciones debido a condiciones de carrera. En este ejemplo, la exclusión mutua se logra utilizando un cerrojo (mutex). La sección crítica es la operación de incremento dentro del bucle. Solo un hilo puede ejecutar esta sección a la vez, asegurando que las actualizaciones al contador sean coherentes. Ejemplo de de Región Crítica Supongamos que se tiene una lista compartida y varios hilos que quieren agregar elementos a esta lista. Se necesita asegurar que la operación de agregar elementos se realice de manera segura. Aquí, la región crítica es la operación de agregar elementos a la lista. El cerrojo (mutex) garantiza que solo un hilo pueda realizar esta operación a la vez, evitando problemas de concurrencia. Ejemplo de Sincronización Suponga que se tiene dos hilos: uno para imprimir números pares y otro para imprimir números impares en orden. Se Necesita sincronizarlos para asegurar que impriman alternadamente en orden. Aquí, se utiliza un objeto de condición (condicion) para sincronizar los hilos. La función notify() señala al otro hilo que puede imprimir, mientras que wait() hace que un hilo espere hasta que sea notificado por el otro. Esto asegura que los números pares e impares se impriman alternadamente en orden.</p>
<p>La entrada <a href="https://www.frexus.dev/post/exclusion-programacion-concurrente/">Exclusión, sincronización y región</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="867" height="1300" src="https://www.frexus.dev/wp-content/uploads/2024/01/pexels-photo-6322483.jpeg" alt="exclusión a man and a woman communicating through hand gestures" class="wp-image-2391" style="width:283px;height:auto" srcset="https://www.frexus.dev/wp-content/uploads/2024/01/pexels-photo-6322483.jpeg 867w, https://www.frexus.dev/wp-content/uploads/2024/01/pexels-photo-6322483-200x300.jpeg 200w, https://www.frexus.dev/wp-content/uploads/2024/01/pexels-photo-6322483-683x1024.jpeg 683w, https://www.frexus.dev/wp-content/uploads/2024/01/pexels-photo-6322483-768x1152.jpeg 768w" sizes="(max-width: 867px) 100vw, 867px" /><figcaption class="wp-element-caption">Photo by cottonbro studio on <a href="https://www.pexels.com/photo/a-man-and-a-woman-communicating-through-hand-gestures-6322483/">Pexels.com</a></figcaption></figure>
</div>


<p>La programación concurrente, esencial en entornos de desarrollo modernos, involucra la ejecución simultánea de múltiples hilos o procesos para mejorar la eficiencia y la capacidad de respuesta de un programa. </p>



<p>Conceptos clave como la exclusión mutua, las regiones críticas y la sincronización juegan un papel fundamental. La <strong>exclusión mutua </strong>asegura que solo un hilo acceda a un recurso compartido en un momento dado, evitando así condiciones de carrera y garantizando la coherencia de los datos. Las <strong>regiones críticas</strong>, por su parte, son secciones de código donde se accede y modifica información compartida, y se implementan para garantizar que estas operaciones críticas se realicen de manera atómica, sin interferencia de otros hilos. La <strong>sincronización</strong>,  coordina la ejecución de hilos para evitar conflictos y lograr un comportamiento predecible, utilizando mecanismos como cerrojos, variables de condición y semáforos. Estos conceptos son esenciales para desarrollar aplicaciones robustas y eficientes en entornos concurrentes. A continuación se muestra unos ejemplos</p>



<h2 class="wp-block-heading">Ejemplo de exclusión mutua</h2>



<p>Supongamos que se tiene una variable global compartida llamada <code>contador</code>. Se quiere garantizar que varios hilos puedan incrementar este contador sin que se pierdan actualizaciones debido a condiciones de carrera.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import threading

contador = 0
mutex = threading.Lock()

def incrementar():
    global contador
    for _ in range(1000000):
        with mutex:
            contador += 1

# Crear hilos
hilo_1 = threading.Thread(target=incrementar)
hilo_2 = threading.Thread(target=incrementar)

# Iniciar hilos
hilo_1.start()
hilo_2.start()

# Esperar a que ambos hilos terminen
hilo_1.join()
hilo_2.join()

print("Valor final del contador:", contador)
</pre>



<p>En este ejemplo, la exclusión mutua se logra utilizando un cerrojo (<code>mutex</code>). La sección crítica es la operación de incremento dentro del bucle. Solo un hilo puede ejecutar esta sección a la vez, asegurando que las actualizaciones al contador sean coherentes.</p>



<h2 class="wp-block-heading">Ejemplo de <strong>de Región Crítica</strong></h2>



<p>Supongamos que se tiene una lista compartida y varios hilos que quieren agregar elementos a esta lista. Se necesita asegurar que la operación de agregar elementos se realice de manera segura.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import threading

lista_compartida = []
mutex = threading.Lock()

def agregar_elemento(elemento):
    with mutex:
        lista_compartida.append(elemento)

# Crear hilos
hilo_1 = threading.Thread(target=agregar_elemento, args=("A",))
hilo_2 = threading.Thread(target=agregar_elemento, args=("B",))

# Iniciar hilos
hilo_1.start()
hilo_2.start()

# Esperar a que ambos hilos terminen
hilo_1.join()
hilo_2.join()

print("Lista final:", lista_compartida)
</pre>



<p>Aquí, la región crítica es la operación de agregar elementos a la lista. El cerrojo (<code>mutex</code>) garantiza que solo un hilo pueda realizar esta operación a la vez, evitando problemas de concurrencia.</p>



<h2 class="wp-block-heading"><strong>Ejemplo de Sincronización</strong></h2>



<p>Suponga que se tiene dos hilos: uno para imprimir números pares y otro para imprimir números impares en orden. Se Necesita sincronizarlos para asegurar que impriman alternadamente en orden.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import threading

mutex = threading.Lock()
condicion = threading.Condition()

def imprimir_pares():
    with mutex:
        for i in range(0, 10, 2):
            print(i)
            condicion.notify()
            condicion.wait()

def imprimir_impares():
    with mutex:
        for i in range(1, 10, 2):
            print(i)
            condicion.notify()
            condicion.wait()

# Crear hilos
hilo_pares = threading.Thread(target=imprimir_pares)
hilo_impares = threading.Thread(target=imprimir_impares)

# Iniciar hilos
hilo_pares.start()
hilo_impares.start()

# Esperar a que ambos hilos terminen
hilo_pares.join()
hilo_impares.join()
</pre>



<p>Aquí, se utiliza un objeto de condición (<code>condicion</code>) para sincronizar los hilos. La función <code>notify()</code> señala al otro hilo que puede imprimir, mientras que <code>wait()</code> hace que un hilo espere hasta que sea notificado por el otro. Esto asegura que los números pares e impares se impriman alternadamente en orden.</p>
<p>La entrada <a href="https://www.frexus.dev/post/exclusion-programacion-concurrente/">Exclusión, sincronización y región</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.frexus.dev/post/exclusion-programacion-concurrente/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2390</post-id>	</item>
	</channel>
</rss>
