Junior — Middle
Көп иштөөдө өз ара тоскоолдук (Deadlock) болдубу?
sobes.tech AI
AIден жооп
Ооба, мен көптөгөн жиптердүү программаларда өз ара блокировка (deadlock) менен тажрыйбам бар. Deadlock — бул эки же андан көп жиптер башка жиптер тарабынан ээлеген ресурстарды бошотконго чейин күтүп жатканы, жана бул ишти токтотууга алып келет.
Мисалы, эгер A жипи ресурсту 1 ээлеп, ресурсту 2 күтүп жатса, жана B жипи ресурсту 2 ээлеп, ресурсту 1 күтүп жатса, deadlock пайда болот.
Goда, бул mutexтер же каналдар туура синхрондоштурулбаганда болушу мүмкүн. Deadlockтан качуу үчүн:
- Ресурстарды дайыма бир эле тартипте алуу керек.
- Timeoutтарды же жокко чыгаруу контексттерин колдонуу.
- Блоктоочу убакытты кыскартуу.
Мисал катары потенциалдуу deadlock менен mutexтер:
var mu1, mu2 sync.Mutex
func f1() {
mu1.Lock()
defer mu1.Unlock()
time.Sleep(time.Second)
mu2.Lock()
defer mu2.Unlock()
// иштөө
}
func f2() {
mu2.Lock()
defer mu2.Unlock()
time.Sleep(time.Second)
mu1.Lock()
defer mu1.Unlock()
// иштөө
}
Бул жерде, f1 жана f2 бир убакта чакырылса, бири-бирин блоктоп калышы мүмкүн.