Sobes.tech
Junior — Middle

Тавзеҳ диҳед, ки Read-Write блок (RWMutex) чист ва чӣ гуна барои идора кардани дастрасӣ ба маълумот истифода мешавад.

sobes.tech AI

Ҷавоб аз AI

قفل خواندن-نوشتن (RWMutex) در زبان برنامه‌نویسی Go یک مکانیزم همزمان‌سازی است که به چندین goroutine اجازه می‌دهد همزمان داده‌ها را بخوانند، در حالی که دسترسی انحصاری هنگام نوشتن را تضمین می‌کند.

  • RLock() / RUnlock() — قفل برای خواندن. چندین goroutine می‌توانند همزمان این قفل را نگه دارند.
  • Lock() / Unlock() — قفل برای نوشتن. تنها یک goroutine می‌تواند آن را نگه دارد و در طول این مدت، هیچ خواندنی مجاز نیست.

این امر عملکرد را زمانی که عملیات‌های خواندن زیاد و نوشتن کم است، افزایش می‌دهد.

مثال استفاده:

var rwMutex sync.RWMutex
var data int

func readData() int {
    rwMutex.RLock()
    defer rwMutex.RUnlock()
    return data
}

func writeData(val int) {
    rwMutex.Lock()
    defer rwMutex.Unlock()
    data = val
}

در این مثال، چندین goroutine می‌توانند همزمان readData() را فراخوانی کنند، اما اگر writeData() فراخوانی شود، تمام عملیات‌های خواندن و نوشتن تا پایان مسدود می‌شوند.