Vai al contenuto principale
🔒 Modalità anteprima. Le prime quindici lezioni di Foundations sono gratuite; questa è Pro. Avvia un trial di 7 giorni per sbloccare l'editor, i suggerimenti AI e il resto del programma. Carta richiesta, disdici in qualsiasi momento dalla Dashboard.Avvia trial di 7 giorni →
← CorsiSenior Deep-DivesModule 8 · Async correctness patternsasyncio.Lock — FIFO-fair, NOT reentrant, cancellation-safepredict130 / 161
+150 XP
Compito
📝 **Compito:** Prevedere l'output esatto. Tre attività denominate A/B/C vengono pianificate tramite raccolta. Ciascuno acquisisce il lucchetto, esegue del lavoro e rilascia. A rimane per 20ms; B e C tengono premuto per 10 ms ciascuno. Prevedi i 6 eventi nell'ordine in cui si attivano. 📋 Implementa la funzione sopra. I test vengono eseguiti automaticamente. 💡 **Suggerimento:** Rileggi la teoria se rimani bloccato.
Predici output

Leggi il codice attentamente

import asyncio


events: list[str] = []


async def critical(lock: asyncio.Lock, name: str, work: float) -> None:
    async with lock:
        events.append(f"{name} acquired")
        await asyncio.sleep(work)
        events.append(f"{name} releasing")


async def main() -> None:
    lock = asyncio.Lock()
    await asyncio.gather(
        critical(lock, "A", 0.02),
        critical(lock, "B", 0.01),
        critical(lock, "C", 0.01),
    )
    for e in events:
        print(e)


asyncio.run(main())

Cosa stamperà il programma? Scrivi qui:

💬 Discussione

Sii il primo a fare una domanda o condividere un consiglio.
Accedi per partecipare alla discussione. La lettura è gratuita.
Caricamento discussione…