Sobes.tech
Junior — Middle

Kas saaksite selgitada lugemis-kirjutamis mehhanismi kontseptsiooni ja selle kasutamist?

sobes.tech AI

Vastus AI-lt

Lugejate-kirjutaja mehhanism on sünkroniseerimise kontseptsioon ühise ressursi juurdepääsuks, kus mitu niiti saavad samaaegselt andmeid lugeda, kuid kirjutamine peab olema eksklusiivne.

Põhiteooria:

  • Mitmed lugejad saavad samaaegselt ressursile juurdepääsu ilma blokeerimiseta, kuna lugemine ei muuda olekut.
  • Kirjutamine nõuab eksklusiivset juurdepääsu, et vältida konflikte ja tagada andmete terviklikkus.

Rakendamine iOS-is võib olla näiteks ühiste andmete või vahemälu töötamisel, kus on oluline lubada mitmeid paralleelseid lugemisi, kuid kirjutamise ajal juurdepääs blokeerida, et vältida võistlusolukordi ja andmete kahjustamist.

Swiftis DispatchQueues kasutades näide:

let concurrentQueue = DispatchQueue(label: "com.example.readersWriters", attributes: .concurrent)
var sharedResource = [String]()

func readData() {
    concurrentQueue.sync {
        print("Andmete lugemine: \(sharedResource)")
    }
}

func writeData(newValue: String) {
    concurrentQueue.async(flags: .barrier) {
        sharedResource.append(newValue)
        print("Andmed kirjutatud: \(newValue)")
    }
}

Siin toimub lugemine paralleelselt, kuid kirjutamine .barrier lipuga blokeerib järjekorra, tagades eksklusiivse juurdepääsu.