Skip to content

Commit

Permalink
Update 3-3-sync Improve mutex description
Browse files Browse the repository at this point in the history
  • Loading branch information
PouriaSeyfi committed Sep 22, 2023
1 parent 98a8ffe commit 2169488
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions content/chapter 3/3.3-sync.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ slug: go-sync-package
weight: 5003
---

پکیج `sync` یکی از کاربردی ترین پکیج ها در زمینه همزمانی می باشد و یکسری تایپ و توابع برای {{< tooltip text="همگام سازی" note="synchronize" >}} و کنترل دسترسی همزمان به داده مشترک ارائه می دهد. که پرکاربردترین آن ها شامل موارد زیر است:
پکیج `sync` یکی از کاربردی ترین پکیج ها در زمینه همزمانی می باشد و یکسری تایپ و توابع برای{{< tooltip text="همگام سازی" note="synchronize" >}} و کنترل دسترسی همزمان به داده های مشترک ارائه می دهد. پرکاربرد ترین ویژگی های این پکیج شامل موارد زیر می شود :

- `Mutex`: با استفاده از این می توانید آن بخش از داده ای که گوروتین ها بطور همزمان قصد دارند دسترسی داشته باشند را قفل کنید.
- `RWMutex`: با استفاده از این می توانید به چند گوروتین در یک زمان اجازه خواندن دهید ولی فقط یک گوروتین می تواند بنویسد.
- `WaitGroup`: یک هماهنگ کننده گوروتین می باشد برای اینکه ترتیب عملیات ها در هنگام همزمانی رعایت شود.
- `Once`: اجازه می دهد یک تابع حداکثر یک بار اجرا شود.
- `Mutex` : با استفاده از این تایپ می توانید آن بخش از داده ای که گوروتین ها بطور همزمان قصد دارند دسترسی داشته باشند را می توانید قفل کنید.
- `RWMutex` : با استفاده از این تایپ می توانید به چندین گوروتین اجازه خواندن دهید اما فقط یک گوروتین قابلیت نوشتن در یک زمان مشخص را دارد.
- `WaitGroup`: یک هماهنگ کننده گوروتین می باشد، برای اینکه ترتیب عملیات ها در هنگام همزمانی رعایت شود.
- `Once`: این تایپ اجازه می دهد یک تابع حداکثر یک بار اجرا شود.
- `Pool`: مجموعه‌ای از آبجکت های موقت که امکان ذخیره و دریافت دارند بدون اینکه بخشی از حافظه را اشتغال کنند.
- `Cond`:با استفاده از Cond می توانید چندین گوروتین ایجاد کنید و اجرای فرآیند آن ها را منتظر وقوع یک رویداد قرار دهید.

Expand All @@ -20,7 +20,8 @@ weight: 5003

## 3.3.1 Mutex

در پکیج `sync` یک تایپ به نام `Mutex` وجود دارد که به شما این امکان را می دهد دسترسی به داده مشترک را {{< tooltip text="همگام سازی" note="synchronize" >}} کنید. زمانیکه از تایپ Mutex استفاده می کند ۲ حالت دارد؛ Lock یا Unlock. وقتی شما Lock می کنید فقط و فقط یک گوروتین می تواند برروی آن بخش از داده کار کند و تا زمانیکه شما Unlock نکنید سایر گوروتین ها نمی توانند دسترسی داشته باشند و باید منتظر بمانند.
در پکیج `sync` یک تایپ به نام `Mutex` وجود دارد که به شما این امکان را می دهد دسترسی به داده های مشترک را {{< tooltip text="همگام سازی" note="synchronize" >}} کنید. با استفاده از این قابلیت در واقع منابع مشترک را محافظت شده و این اطمینان به شما داده می شود که تنها یک گوروتین در یک زمان مشخص، به دیتای مشترک بین گوروتین ها دسترسی دارد.
تایپ Mutex شامل دو متد مهم Lock یا Unlock است. وقتی Lock فراخوانی می شود فقط و فقط یک گوروتین می تواند برروی آن بخش از داده کار کند و تا زمانیکه شما Unlock نکنید سایر گوروتین ها نمی توانند به دیتای مورد نظر شما دسترسی داشته باشند و تا زمانیکه Unlock صورت گیرد سایر گوروتین هادر حالت انتظار باقی می مانند.

به مثال زیر توجه کنید :

Expand Down

0 comments on commit 2169488

Please sign in to comment.