Sobes.tech
Junior

Жарыш шарттары деген эмне?

sobes.tech AI

AIден жооп

Жарыш абалы — бул көптреддүү же көппротсессүү колдонмодо пайда болгон көйгөй, анда натыйжонун тактыгы треддердин/протсессдердин аткаруу тартибинен көз каранды.

Көпчүлүк учурда бул бир нече треддердин жалпы ресурстарга (өзгөрмөлөр, файлдар, маалыматтар базалары) синхрондоштуруу жоктугунан келип чыгат:

Бул күтүүсүз жүрүм-турумга, каталарга жана так эмес маалыматтарга алып келет:

Мисал катары: эки тред бир убакта жалпы өзгөрмөнү көбөйтүүгө аракет кылууда:

var sharedCounter = 0

func incrementCounter() {
    let currentValue = sharedCounter // Тред 1 0 деп окуйт
    // Кээ бир кечиктирүү
    let newValue = currentValue + 1 // Тред 1 1 деп эсептейт
    sharedCounter = newValue // Тред 1 1 деп жазат
}

// Эгер Тред 2 currentValue деп окуп жатканда, Тред 1 жазып жаткан болсо:
func anotherIncrementCounter() {
    let currentValue = sharedCounter // Тред 2 0 деп окуйт
    let newValue = currentValue + 1 // Тред 2 1 деп эсептейт
    sharedCounter = newValue // Тред 2 1 деп жазат
}

Бул мисалда, эгер эки тред тең бир убакта синхрондоштуруу жок болсо аткарылса, анда sharedCounter 2 эмес, 1 болушу мүмкүн.

Жарыш абалын алдын алуу үчүн төмөнкү механизмдер колдонулат:

  • Мьютекс (Mutex): Ресурска кирүүнү блоктойт, бир убакта бир гана тред критикалык бөлүмдө болушу мүмкүн.
  • Семафор (Semaphore): бир убакта ресурска кире алчу треддердин санын чектейт.
  • Жеткиликтүүлүк кезектери (Dispatch Queues GCD): тапшырмалардын аткарылышы кезекке коюу аркылуу (Serial Queue) же белгилүү деңгээлде параллелизм менен (Concurrent Queue) жүргүзүлөт, жана кирүүнү синхрондоштуруу мүмкүнчүлүгү бар.
  • Блокировкалар (Locks): ар түрдүү түрлөрү (мисалы, NSLock, NSRecursiveLock).
  • Атомардык операциялар (Atomic Operations): операциянын (окуу, жазуу, инкремент) атомардуу аткарылышын камсыз кылат, башка треддин аралашуусуз.

iOS өнүктүрүүдө көбүнесе Grand Central Dispatch (GCD) жана Operation Queues колдонулат, бул треддерди башкаруу жана жарыш абалдарын алдын алуу үчүн. Serial Dispatch Queues автоматтык түрдө тапшырмаларды синхрондоштурат.