Mi az a deadlock?
sobes.tech MI
Válasz az MI-től
Deadlock (kölcsönös zárolás) olyan helyzet a több szálas vagy több folyamatos környezetben, amikor két vagy több folyamat (vagy szál) örökre blokkolja egymást, várva, hogy felszabaduljanak egymás által foglalt erőforrások.
Példa: Az A szál megszerezte az 1-es erőforrást és a 2-es erőforrást várja, míg a B szál megszerezte a 2-es erőforrást és az 1-es erőforrást várja. Egyik sem tud továbbmenni — kialakul a kölcsönös zárolás.
Go nyelvben deadlock fordulhat elő, például, ha egy goroutine megpróbál adatot küldeni vagy fogadni egy csatornán, de egy másik goroutine nem kész fogadni vagy küldeni, és minden goroutine blokkolva van.
Go példája deadlock-ra:
func main() {
ch := make(chan int)
ch <- 1 // Kísérlet csatornára küldésre fogadó nélkül — a program meg fog akadni
}
Itt a program meg fog állni, mert nincs olyan goroutine, ami olvasna a csatornáról, és a küldés örökre blokkolódik.
A deadlockok elkerülése érdekében fontos, hogy helyesen tervezzük meg a szálak közötti interakciót, és óvatosan használjuk a szinkronizációs mechanizmusokat.