Sobes.tech
Middle+

Ի՞նչ կարող եք ասել Reader-Writer խնդիրի մասին։

sobes.tech AI

Պատասխան AI-ից

Կարդացող-գրող խնդիրն առաջանում է, երբ միաժամանակ մի քանի թելեր մուտք են գործում ընդհանուր ռեսուրս, որտեղ որոշները միայն կարդում են տվյալները (կարդացողներ), իսկ մյուսները փոփոխում են դրանք (գրողներ):

Հիմնական նպատակն է ապահովել՝

  • Միաժամանակյա ընթերցում մի քանի կարդացողների կողմից առանց բլոկավորումների (որպեսզի բարձրացվի արտադրողականությունը):
  • Թույլ չտալ գրողի միաժամանակյա մուտքը մյուս գրողների կամ կարդացողների հետ, որպեսզի կանխվի մրցակցային պայմանները և անհամապատասխան տվյալները:

Դրա համար օգտագործվում են հատուկ սինխրոնիզացիոն մեխանիզմներ՝ Կարդացող-գրող լոկեր (Reader-Writer locks): Դրանք թույլ են տալիս՝

  • Միաժամանակ մի քանի թել կարող է ընթերցել:
  • Գրառումը կատարվում է բացառիկ, մյուսներին բլոկավորելով:

Այսպիսով, դա բարելավում է արտադրողականությունը սովորական mutex-ների համեմատ, որոնք ամբողջությամբ բլոկավորում մուտքը:

iOS/Swift-ում նմանատիպ խնդիրների համար կարելի է օգտագործել DispatchQueue բարիերով (barrier), կամ NSLock/pthread_rwlock_t՝ Reader-Writer լոկեր իրականացնելու համար։