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 |
import java.util.concurrent.Semaphore fun main() { // Crear un semáforo con 2 permisos val semaphore = Semaphore(2) // Función para simular tareas concurrentes que usan el semáforo fun worker(id: Int) { println("Worker $id está intentando adquirir un permiso...") semaphore.acquire() // Adquirir un permiso println("Worker $id ha adquirido un permiso.") // Simular trabajo Thread.sleep(1000) println("Worker $id está liberando el permiso.") semaphore.release() // Liberar el permiso } // Crear múltiples hilos que intentan adquirir permisos val threads = List(5) { id -> Thread { worker(id) } } // Iniciar los hilos threads.forEach { it.start() } // Esperar a que todos los hilos terminen threads.forEach { it.join() } } |