--- /dev/null
+Proceso 0 (entra): molinete = 1
+Proceso 1 (entra): molinete = 2
+Proceso 0 (entra): molinete = 3
+Proceso 1 (sale): molinete = 2
+Proceso 0 (sale): molinete = 1
+Proceso 1 (entra): molinete = 2
+Proceso 0 (sale): molinete = 1
+Proceso 1 (entra): molinete = 2
+Proceso 0 (sale): molinete = 1
+Proceso 1 (entra): molinete = 2
+Proceso 0 (sale): molinete = 1
+Proceso 1 (sale): molinete = 0
+Proceso 0 (entra): molinete = 1
+Proceso 1 (sale): molinete = 0
+Proceso 0 (entra): molinete = 1
+Proceso 1 (sale): molinete = 0
+Proceso 0 (entra): molinete = 1
+Proceso 1 (sale): molinete = 0
+Proceso 0 (entra): molinete = 1
+Proceso 1 (entra): molinete = 2
--- /dev/null
+Proceso 0 (entra): molinete = 1
+Proceso 1 (sale): molinete = 0
+Proceso 2 (entra): molinete = 1
+Proceso 3 (sale): molinete = 0
+Proceso 4 (entra): molinete = 1
+Proceso 0 (sale): molinete = 0
+Proceso 1 (entra): molinete = 1
+Proceso 2 (entra): molinete = 2
+Proceso 3 (sale): molinete = 1
+Proceso 4 (entra): molinete = 2
+Proceso 0 (entra): molinete = 3
+Proceso 1 (sale): molinete = 2
+Proceso 2 (entra): molinete = 3
+Proceso 3 (sale): molinete = 2
+Proceso 4 (entra): molinete = 3
+Proceso 0 (entra): molinete = 4
+Proceso 1 (sale): molinete = 3
+Proceso 2 (entra): molinete = 4
+Proceso 3 (entra): molinete = 5
+Proceso 4 (sale): molinete = 4
+Proceso 0 (sale): molinete = 3
+Proceso 1 (entra): molinete = 4
+Proceso 2 (entra): molinete = 5
+Proceso 3 (entra): molinete = 6
+Proceso 4 (sale): molinete = 5
+Proceso 0 (entra): molinete = 6
+Proceso 1 (entra): molinete = 7
+Proceso 2 (sale): molinete = 6
+Proceso 3 (sale): molinete = 5
+Proceso 4 (entra): molinete = 6
+Proceso 0 (entra): molinete = 7
+Proceso 1 (sale): molinete = 6
+Proceso 2 (sale): molinete = 5
+Proceso 3 (sale): molinete = 4
+Proceso 4 (entra): molinete = 5
+Proceso 0 (entra): molinete = 6
+Proceso 1 (sale): molinete = 5
+Proceso 2 (sale): molinete = 4
+Proceso 3 (entra): molinete = 5
+Proceso 4 (entra): molinete = 6
+Proceso 0 (sale): molinete = 5
+Proceso 1 (entra): molinete = 6
+Proceso 2 (entra): molinete = 7
+Proceso 3 (sale): molinete = 6
+Proceso 4 (entra): molinete = 7
+Proceso 0 (entra): molinete = 8
+Proceso 1 (sale): molinete = 7
+Proceso 2 (entra): molinete = 8
+Proceso 3 (sale): molinete = 7
+Proceso 4 (entra): molinete = 8
--- /dev/null
+Productor puso elem = 1875524184
+Consumidor saco elem = 1875524184
+Productor puso elem = 1569780113
+Consumidor saco elem = 1569780113
+Productor puso elem = 604830717
+Consumidor saco elem = 604830717
+Productor puso elem = 1544681649
+Consumidor saco elem = 1544681649
+Productor puso elem = 771153342
+Consumidor saco elem = 771153342
+Productor puso elem = 368326263
+Consumidor saco elem = 368326263
+Productor puso elem = 53956058
+Consumidor saco elem = 53956058
+Productor puso elem = 1594193704
+Consumidor saco elem = 1594193704
+Productor puso elem = 1671142862
+Consumidor saco elem = 1671142862
+Productor puso elem = 207616699
+Consumidor saco elem = 207616699
--- /dev/null
+Productor 0 puso su parte: 1117307348
+Productor 1 puso su parte: 830083622
+Productor 2 puso su parte: 520364027
+Consumidor 0 consumio 1117307348,830083622,520364027
+Consumidor 1 consumio 1117307348,830083622,520364027
+Productor 1 puso su parte: 274330039
+Productor 2 puso su parte: 1155818032
+Productor 0 puso su parte: 1663649001
+Consumidor 0 consumio 1663649001,274330039,1155818032
+Consumidor 1 consumio 1663649001,274330039,1155818032
+Productor 1 puso su parte: 1943562083
+Productor 2 puso su parte: 1509590975
+Productor 0 puso su parte: 1703072593
+Consumidor 0 consumio 1703072593,1943562083,1509590975
+Consumidor 1 consumio 1703072593,1943562083,1509590975
+Productor 1 puso su parte: 999422065
+Productor 2 puso su parte: 606059517
+Productor 0 puso su parte: 1231512112
+Consumidor 0 consumio 1231512112,999422065,606059517
+Consumidor 1 consumio 1231512112,999422065,606059517
+Productor 1 puso su parte: 1940342272
+Productor 2 puso su parte: 1792288977
+Productor 0 puso su parte: 150210369
+Consumidor 0 consumio 150210369,1940342272,1792288977
+Consumidor 1 consumio 150210369,1940342272,1792288977
+Productor 1 puso su parte: 1552932866
+Productor 2 puso su parte: 941435881
+Productor 0 puso su parte: 2053784694
+Consumidor 0 consumio 2053784694,1552932866,941435881
+Consumidor 1 consumio 2053784694,1552932866,941435881
+Productor 1 puso su parte: 125790913
+Productor 2 puso su parte: 1965956935
+Productor 0 puso su parte: 307691490
+Consumidor 0 consumio 307691490,125790913,1965956935
+Consumidor 1 consumio 307691490,125790913,1965956935
+Productor 1 puso su parte: 676394679
+Productor 2 puso su parte: 228875963
+Productor 0 puso su parte: 1488747036
+Consumidor 0 consumio 1488747036,676394679,228875963
+Consumidor 1 consumio 1488747036,676394679,228875963
+Productor 1 puso su parte: 909918022
+Productor 2 puso su parte: 1551926713
+Productor 0 puso su parte: 148369381
+Consumidor 0 consumio 148369381,909918022,1551926713
+Consumidor 1 consumio 148369381,909918022,1551926713
+Productor 1 puso su parte: 422740767
+Productor 2 puso su parte: 593466398
+Productor 0 puso su parte: 1611020852
+Consumidor 0 consumio 1611020852,422740767,593466398
+Consumidor 1 consumio 1611020852,422740767,593466398
--- /dev/null
+Producido 112
+Consumido 112
+Producido -110
+Consumido -110
+Producido 67
+Consumido 67
+Producido -128
+Consumido -128
+Producido 60
+Consumido 60
+Producido -103
+Consumido -103
+Producido -10
+Consumido -10
+Producido -36
+Consumido -36
+Producido -43
+Consumido -43
+Producido -69
+Consumido -69
--- /dev/null
+Producida parte 0: 112
+Producida parte 1: 60
+Producida parte 2: -96
+Consumidor 0 consumió: 112,60,-96
+Producida parte 0: 8
+Producida parte 1: 55
+Producida parte 2: 55
+Consumidor 0 consumió: 8,55,55
+Consumidor 1 consumió: 112,60,-96
+Producida parte 0: 82
+Producida parte 1: 119
+Producida parte 2: -40
+Consumidor 0 consumió: 82,119,-40
+Consumidor 1 consumió: 8,55,55
+Producida parte 0: 29
+Producida parte 1: -70
+Producida parte 2: 126
+Consumidor 0 consumió: 29,-70,126
+Consumidor 1 consumió: 82,119,-40
+Producida parte 0: -23
+Producida parte 1: -112
+Producida parte 2: 42
+Consumidor 0 consumió: -23,-112,42
+Consumidor 1 consumió: 29,-70,126
+Producida parte 0: -40
+Producida parte 1: 25
+Producida parte 2: 19
+Consumidor 0 consumió: -40,25,19
+Consumidor 1 consumió: -23,-112,42
+Producida parte 0: -97
+Producida parte 1: 80
+Producida parte 2: 18
+Consumidor 0 consumió: -97,80,18
+Consumidor 1 consumió: -40,25,19
+Producida parte 0: -20
+Producida parte 1: 101
+Producida parte 2: 50
+Consumidor 0 consumió: -20,101,50
+Consumidor 1 consumió: -97,80,18
+Producida parte 0: 76
+Producida parte 1: -84
+Producida parte 2: 37
+Consumidor 0 consumió: 76,-84,37
+Consumidor 1 consumió: -20,101,50
+Producida parte 0: -17
+Producida parte 1: -120
+Producida parte 2: 68
+Consumidor 0 consumió: -17,-120,68
+Consumidor 1 consumió: 76,-84,37
+Consumidor 1 consumió: -17,-120,68
--- /dev/null
+Producido 1647725001
+Consumido 1647725001
+Producido 454135081
+Consumido 454135081
+Producido 124696018
+Consumido 124696018
+Producido 1080976362
+Consumido 1080976362
+Producido 961146294
+Consumido 961146294
+Producido 1234945243
+Consumido 1234945243
+Producido 1064431070
+Consumido 1064431070
+Producido 644466916
+Consumido 644466916
+Producido 294767564
+Consumido 294767564
+Producido 1187853768
+Consumido 1187853768
--- /dev/null
+Producida parte 0: 1525940103
+Producida parte 1: 1222633773
+Producida parte 2: 1983873884
+Consumidor 1 consumió: 1525940103,1222633773,1983873884
+Consumidor 0 consumió: 1525940103,1222633773,1983873884
+Producida parte 0: 548641270
+Producida parte 1: 1439430970
+Producida parte 2: 175658020
+Consumidor 1 consumió: 548641270,1439430970,175658020
+Consumidor 0 consumió: 548641270,1439430970,175658020
+Producida parte 0: 1904075607
+Producida parte 1: 1485984749
+Producida parte 2: 1057420435
+Consumidor 1 consumió: 1904075607,1485984749,1057420435
+Consumidor 0 consumió: 1904075607,1485984749,1057420435
+Producida parte 0: 1129162256
+Producida parte 1: 1817761698
+Producida parte 2: 1421428312
+Consumidor 1 consumió: 1129162256,1817761698,1421428312
+Consumidor 0 consumió: 1129162256,1817761698,1421428312
+Producida parte 0: 477273413
+Producida parte 1: 339626704
+Producida parte 2: 193465623
+Consumidor 1 consumió: 477273413,339626704,193465623
+Consumidor 0 consumió: 477273413,339626704,193465623
+Producida parte 0: 1081116733
+Producida parte 1: 488591338
+Producida parte 2: 957633490
+Consumidor 1 consumió: 1081116733,488591338,957633490
+Consumidor 0 consumió: 1081116733,488591338,957633490
+Producida parte 0: 1005604487
+Producida parte 1: 1782574754
+Producida parte 2: 1472220372
+Consumidor 1 consumió: 1005604487,1782574754,1472220372
+Consumidor 0 consumió: 1005604487,1782574754,1472220372
+Producida parte 0: 1172483125
+Producida parte 1: 1810372399
+Producida parte 2: 290491999
+Consumidor 1 consumió: 1172483125,1810372399,290491999
+Consumidor 0 consumió: 1172483125,1810372399,290491999
+Producida parte 0: 1066951836
+Producida parte 1: 657744293
+Producida parte 2: 234404203
+Consumidor 1 consumió: 1066951836,657744293,234404203
+Consumidor 0 consumió: 1066951836,657744293,234404203
+Producida parte 0: 2117514352
+Producida parte 1: 1228014258
+Producida parte 2: 1395816649
+Consumidor 1 consumió: 2117514352,1228014258,1395816649
+Consumidor 0 consumió: 2117514352,1228014258,1395816649
--- /dev/null
+===============================
+Sistemas Distribuidos I (75.74)
+===============================
+
+----------------------------------
+Práctica 2: Repaso de concurrencia
+----------------------------------
+
+:Author: Leandro Lucarella (77891)
+
+.. contents:: Índice
+.. sectnum::
+ :depth: 3
+
+Exclusión Mutua
+===============
+
+
+Problema de los jardines con shared memory
+------------------------------------------
+
+Como implementa el mutex con el algoritmo de Dekker con turnos sólo funciona
+para 2 procesos y hay que numerarlos a mano. Se corre con::
+
+ $ ./P02e1101 0 & ./P02e1101 1 &
+
+El primer parámetro es el número de proceso, debe ser 0 o 1, se puede pasar un
+segundo parametro opcional con la cantidad de iteraciones a realizar. El proceso
+0 debe ejecutarse primero porque es el que inicializa las estructuras
+compartidas.
+
+Se provee un script lanzador::
+
+ $ ./P02e1101.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones.
+
+Código fuente (P02e1101.cpp)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: P02e1101.cpp
+ :literal:
+
+Código fuente (P02e1101.sh)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: P02e1101.sh
+ :literal:
+
+Corrida de ./P02e1101.sh
+^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: P02e1101.corrida
+ :literal:
+
+
+Problema de los jardines con semáforos y shared memory
+------------------------------------------------------
+
+Muy similar al anterior pero se puede correr con N procesos porque se usan
+semáforos para hacer exclusión mutua. Por ejemplo::
+
+ $ ./P02e1201 0 & ./P02e1201 1 & ./P02e1201 2 & ./P02e1201 3 & ./P02e1201 4
+
+También acepta un párametro extra para la cantidad de iteraciones.
+
+Se provee un script lanzador::
+
+ $ ./P02e1201.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones, este lanzador
+corre 5 instancias como en la línea de ejecución de ejemplo.
+
+Código fuente (P02e1201.cpp)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: P02e1201.cpp
+ :literal:
+
+Código fuente (P02e1201.sh)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: P02e1201.sh
+ :literal:
+
+Corrida de ./P02e1201.sh
+^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: P02e1201.corrida
+ :literal:
+
+
+Análisis de entrelazado, interbloqueo y espera activa
+-----------------------------------------------------
+En el primer programa no hay posibilidad de interbloqueo ya que se utiliza el
+algoritmo de Dekker que es un algoritmo muy conocido y probado que garantiza
+tanto la ausencia de interbloqueo como *fairness*. Sin embargo sí hay espera
+activa (el algoritmo se basa en espera activa sobre variables compartidas). El
+entrelazado puede observarse gracias a la llamada a sched_yield(). De no
+utilizarse, el entrelazado se ve de manera mucho menos frecuente, ya que hay que
+esperar que se agote el *timeslice* del proceso en ejecución (que se queda
+ejecutando la espera activa) para que el kernel ponga a ejecutar otro proceso.
+
+En el segundo programa, con el entrelazado pasa exactamente lo mismo, porque los
+semáforos se utilizan como mutex, de la misma manera que fue usado el mutex
+construido con el algoritmo de Dekker. Tampoco hay posibilidad de interbloqueo
+porque no hay anidamiento de mutex ni ninguna otra condición que pueda llevar a
+esto, es un uso muy básico y simple de un sólo semáforo a modo de mutex. Sin
+embargo, la espera activa desaparece gracias a la utilización de los semáforos,
+ya que si un proceso hace el wait y el semáforo está en 0, el kernel pone el
+proceso en pausa y continúa ejecutando otros procesos hasta que el estado del
+semáforo cambie con un signal.
+
+
+
+Sincronización
+==============
+
+
+Usando semáforos binarios y shared memory
+-----------------------------------------
+
+Esquema productor-consumidor
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Productor-consumidor usando semáforos binarios y shared memory. Debe coincidir
+la cantidad de cosas a producir y a consumir, y debe correrse primero el
+productor porque inicializa las estructuras compartidas. Por ejemplo::
+
+ $ ./P02e2111 0 & ./P02e2111 1 &
+
+También acepta un parámetro extra para la cantidad de iteraciones. 0 es
+productor, 1 es consumidor.
+
+Otra forma de probar con varios consumidores es::
+
+ $ ./P02e2111 0 20 & ./P02e2111 1 12 & ./P02e2111 1 8 &
+
+Se provee un script lanzador::
+
+ $ ./P02e1201.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones, este lanzador
+corre 1 productor y 1 consumidor.
+
+Código fuente (P02e2111.cpp)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2111.cpp
+ :literal:
+
+Código fuente (P02e2111.sh)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2111.sh
+ :literal:
+
+Corrida de ./P02e2111.sh
+~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2111.corrida
+ :literal:
+
+
+Esquema productor-consumidor con 3 productores y 2 consumidores
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Productor-consumidor usando semáforos binarios y shared memory pero con 3
+productores que producen parcialmente y 2 consumidores que consumen todo.
+Debe correr primero el primer productor porque inicializa las estructuras
+compartidas. Por ejemplo::
+
+ $ ./P02e2121 0 & ./P02e2121 1 & ./P02e2121 2 & ./P02e2121 3 & ./P02e2121 4 &
+
+El proceso 0 a 2 son productores, el 3 y 4 consumidores.
+
+Se provee un script lanzador::
+
+ $ ./P02e2121.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones.
+
+Código fuente (P02e2121.cpp)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2121.cpp
+ :literal:
+
+Código fuente (P02e2121.sh)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2121.sh
+ :literal:
+
+Corrida de ./P02e2121.sh
+~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2121.corrida
+ :literal:
+
+
+Usando colas de mensajes
+------------------------
+
+Esquema productor-consumidor
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Productor-consumidor usando colas de mensajes. Debe coincidir la cantidad de
+cosas a producir y a consumir, y puede haber sólo un productor (que debe
+correr primero) y un solo consumidor. Por ejemplo::
+
+ $ ./P02e2211 0 & ./P02e2211 1 &
+
+También acepta un parámetro extra para la cantidad de iteraciones. 0 es
+productor, 1 es consumidor.
+
+Se provee un script lanzador::
+
+ $ ./P02e2211.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones.
+
+Código fuente (P02e2211.cpp)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2211.cpp
+ :literal:
+
+Código fuente (P02e2211.sh)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2211.sh
+ :literal:
+
+Corrida de ./P02e2211.sh
+~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2211.corrida
+ :literal:
+
+
+Esquema productor-consumidor con 3 productores y 2 consumidores
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Productor-consumidor usando colas de mensajes pero con 3 productores que
+producen parcialmente y 2 consumidores que consumen todo. Debe correr
+primero el primer productor porque inicializa las estructuras compartidas.
+Por ejemplo::
+
+ $ ./P02e2221 0 & ./P02e2221 1 & ./P02e2221 2 & ./P02e2221 3 & ./P02e2221 4 &
+
+El proceso 0 a 2 son productores, el 3 y 4 consumidores.
+
+Se provee un script lanzador::
+
+ $ ./P02e2221.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones.
+
+Código fuente (P02e2221.cpp)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2221.cpp
+ :literal:
+
+Código fuente (P02e2221.sh)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2221.sh
+ :literal:
+
+Corrida de ./P02e2221.sh
+~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2221.corrida
+ :literal:
+
+
+Usando pipes
+------------
+
+Esquema productor-consumidor
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Productor-consumidor usando pipes. Debe coincidir la cantidad de cosas a
+producir y a consumir, y puede haber sólo un productor (que debe correr
+primero) y un sólo consumidor. Por ejemplo::
+
+ $ ./P02e2311 0 & ./P02e2311 1 &
+
+También acepta un parámetro extra para la cantidad de iteraciones. 0 es
+productor, 1 es consumidor.
+
+Se provee un script lanzador::
+
+ $ ./P02e2311.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones.
+
+Código fuente (P02e2311.cpp)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2311.cpp
+ :literal:
+
+Código fuente (P02e2311.sh)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2311.sh
+ :literal:
+
+Corrida de ./P02e2311.sh
+~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2311.corrida
+ :literal:
+
+
+Esquema productor-consumidor con 3 productores y 2 consumidores
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Productor-consumidor usando pipes pero con 3 productores que producen
+parcialmente y 2 consumidores que consumen todo. Debe correr primero el
+primer productor porque inicializa las estructuras compartidas. Por ejemplo::
+
+ $ ./P02e2321 0 & ./P02e2321 1 & ./P02e2321 2 & ./P02e2321 3 & ./P02e2321 4 &
+
+El proceso 0 a 2 son productores, el 3 y 4 consumidores.
+
+Se provee un script lanzador::
+
+ $ ./P02e2321.sh
+
+Recibe un parámetro opcional con la cantidad de iteraciones.
+
+Código fuente (P02e2321.cpp)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2321.cpp
+ :literal:
+
+Código fuente (P02e2321.sh)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2321.sh
+ :literal:
+
+Corrida de ./P02e2321.sh
+~~~~~~~~~~~~~~~~~~~~~~~~
+.. include:: P02e2321.corrida
+ :literal:
+
+
+Análisis de entrelazado, interbloqueo y espera activa
+-----------------------------------------------------
+En el punto 2.1.2 es el único ejemplo en donde puede observarse espera activa,
+ya que se verifica si un flag está seteado. Este flag indica si la parte
+correspondiente al productor en ejecución ya fue producida, de ser así espera
+(activamente) que los demás productores terminen de producir lo que les
+corresponda para luego pasar el control a los consumidores. La espera activa es
+realmente **muy** notoria.
+
+Con respecto a interbloqueo, a menos que haya algún bug, no debería haber en
+ninguno de los 3 casos, porque los ejercicios fueron pensados para que no hayan
+2 procesos esperando condiciones complementarias.
+
+Finalmente con el entrelazado pasa algo similar a lo comentado en el punto 1.3,
+excepto (nuevamente) por el ejericio 2.1.2, que por la forma en la que está
+resuelto, obliga a la existencia de entrelazado entre cada proceso, porque cada
+productor espera a que el resto termine, y ambos consumidores esperan a que
+todas las partes estén producidas. Hay libertad sobre la forma que pueden
+entrelazarse los productores entre sí, y los consumidores entre sí (aunque no se
+aprecie en la corrida), pero debe haber entrelazado entre el conjunto de
+productores y consumidores 1 a 1. En los otros ejemplo sí pasa lo descripto en
+el punto 1.3, que, si no se utilizara la llamada a sched_yield(), no se vería
+entrelazado entre los consumidores y productores a menos que se haga una corrida
+mucho más larga (más iteraciones) de forma que se agote el *timeslice* (o que se
+acabe el *buffer* de las colas o pipes y se ponga a dormir el proceso) de los
+procesos antes de que estos finalicen.
+