1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import java.util.concurrent.locks.ReentrantLock fun main() { val lock = ReentrantLock() var sharedCounter = 0 // Variable compartida // Función que intenta incrementar y luego decrementar el contador compartido fun modifyCounter() { lock.lock() // Adquirir el bloqueo try { val temp = sharedCounter println("${Thread.currentThread().name} leyó el valor: $temp") Thread.sleep(500) // Simular una operación sharedCounter = temp + 1 println("${Thread.currentThread().name} incrementó el valor: $sharedCounter") } finally { lock.unlock() // Liberar el bloqueo } } // Crear varios hilos que ejecutan la función modifyCounter val thread1 = Thread { modifyCounter() } val thread2 = Thread { modifyCounter() } // Iniciar los hilos thread1.start() thread2.start() // Esperar a que los hilos terminen thread1.join() thread2.join() // Resultado final println("Valor final del contador: $sharedCounter") } |