Sobes.tech
Junior — Middle

Омодаи структураҳои додаҳо, ки истифода мешаванд, бехатариро дар кор бо ҷараёнҳои параллелӣ таъмин мекунанд?

sobes.tech AI

Ҷавоб аз AI

ใน iOS โครงสร้างข้อมูลมาตรฐาน เช่น อาร์เรย์ (Array), ดิกชันนารี (Dictionary) และเซ็ต (Set) ไม่ได้ปลอดภัยสำหรับเธรด ซึ่งหมายความว่าการเข้าถึงพร้อมกันจากหลายเธรดโดยไม่มีการซิงโครไนซ์อาจทำให้เกิดเงื่อนไขการแข่งขันและพฤติกรรมที่ไม่สามารถคาดเดาได้

เพื่อให้แน่ใจในความปลอดภัยในการทำงานแบบขนาน จะใช้:

  • คิว DispatchQueue ที่มีกลยุทธ์การซิงโครไนซ์ที่เหมาะสม (เช่น คิวแบบลำดับสำหรับการเขียน)
  • คลาสเช่น NSLock, NSRecursiveLock และกลไกล็อคอื่น ๆ
  • โครงสร้างระดับสูง เช่น DispatchSemaphore หรือ OperationQueue

ตัวอย่างการใช้คิวแบบลำดับเพื่อป้องกันการเข้าถึงอาร์เรย์:

let queue = DispatchQueue(label: "com.example.arrayQueue")
var array: [Int] = []

func appendElement(_ element: Int) {
    queue.sync {
        array.append(element)
    }
}

ด้วยวิธีนี้ ความปลอดภัยไม่ได้มาจากโครงสร้างข้อมูลเอง แต่เป็นการซิงโครไนซ์ภายนอก