یاریشما دورومو
یاریشما دورومو (اینگیلیسجه: race condition) و یا یاریشما خطری (اینگیلیسجه: race hazard)، بیر الکترونیک، یازیلیم و یا باشقا بیر سیستئمین اساس داورانیشینین کنترل ائدیلهمهین حادیثهلرین آردیجیلیغیندان و یا واختیندان آسیلی اولما دورومودور. بو دوروم گؤزلهنیلمز، کاریخدیریجی و اویغون اولمایان سونوجلار الده ائدیر. اولاسی (مومکون) داورانیشلاردان بیری و یا بیر نئچهسی ایستنمهین اولدوغوندا بیر باگ حالینا گلیر.
یاریشما دورومو قاورامی ذاتن ۱۹۵۴-جو ایلده، اؤرنک اولاراق، دوید آ. هافمن'نین "The synthesis of sequential switching circuits" آدلی دوکتورلوق تئزینده قوللانیلمیشدیر.
یاریشما دورومو اؤزللیکله منطق دئورهلرینده، چوخ-ایپلی (multithreaded) و یا داغیتیلمیش (distributed) یازیلیم پروقراملاریندا باش وئره بیلر.
یازیلیمدا
[دَییشدیر]بیلگیسایار پروقرامیندا عینی آندا بیر نئچه کود یولو اولدوغوندا، پروقرامدا یاریشما دورومو باش وئره بیلر. بیردن چوخ کود یوللاری گؤزلهنیلندن فرقلی واخت آلیرسالار، گؤزلهنیلدیغیندن فرقلی ترتیبده تاماملانا بیلر و گؤزلهنیلمز داورانیش سونوجوندا باگ ایله سونوجلانا بیلر. ایکی پروقرام آراسیندا امنیتی سورونلارینا ندن اولا بیلهجک یاریشمادا باش وئره بیلر.
کریتیک (حیاتی) یاریشما دوروملاری گئچرسیز ایجرا و یازیلیم باگلارینا سبب اولور. حیاتی یاریشما دوروملاری عمومیتله ایشلملرین و یا ایپلرین (thread) بعضی پایلاشیلان دوروملارا (state) آسیلی اولدوغوندا باش وئریر. پایلاشیلان دوروملار اوزره ایشلملر بیر-بیرینی دیشلایان (mutually exclusive) کریتیک بؤلمهلرده باش وئریلیر. بو قایدایا عمل ائدیلمهمهسی پایلاشیلان دورومو پوزا بیلر.
سون سونوج بلیرلهییجی اولمادیغینا گؤره (غیر-قطعی) و متداخل ایپلرین آراسیندا اولان نسبی زامانا باغلی اولدوغونا گؤره، یاریشما دورومونون یئنیدن اورهتیلمهسی (تولیدی) و دیباگی چتین اولا بیلر. بونا گؤره ده، بئله بیر سورونلار، دیباگ مودوندا ایشلرکن، داها چوخ لاگ و یا بیر دیباگر آرتیریرکن اورتادان یوخ اولا بیلرلر. دیباگ زامانی بو شکیلده یوخا چیخان باگ چوخ واخت "هایزنباگ" آدلانیر. بونا گؤره دیققتلی یازیلیم تاساریمی ایله یاریشما دوروملاریندان قاچماق داها یاخشیدیر.
اؤرنک
[دَییشدیر]توتاق کی، ایکی ایپ (thread) هر بیری قلوبال بیر دییشگن دهیهرینی ۱ سایی قدر آرتیریر. ایدهآل اولاراق، آشاغیداکی حرکتلر آردیجیللیغی باش وئریر:
۱. ایپ | ۲. ایپ | سایی | |
---|---|---|---|
0 | |||
دهیهری اوخو (آل) | → | 0 | |
دهیهری آرتیر | 0 | ||
دهیهری یاز (ساخلا) | ← | 1 | |
دهیهری اوخو (آل) | → | 1 | |
دهیهری آرتیر | 1 | ||
دهیهری یاز (ساخلا) | ← | 2 |
یوخاریدا گؤستهریلن دورومدا گؤزلهنیلن کیمی سون دهیهر ۲-دیر. بونونلا بئله، ایکی ایپ عینی واختدا کیلیدلنمدن (lock) و یا سینک ائدیلمهدن (سئمافورلار واسطهسیله) ایشلهییرسه، ایشلهمین سونوجو یانلیش اولا بیلر. آشاغیداکی آلتئرناتیو ایشلملرین آردیجیللیغی بو سناریویو گؤستهریر:
۱. ایپ | ۲. ایپ | سایی | |
---|---|---|---|
0 | |||
دهیهری اوخو (آل) | → | 0 | |
دهیهری اوخو (آل) | → | 0 | |
دهیهری آرتیر | 0 | ||
دهیهری آرتیر | 0 | ||
دهیهری یاز (ساخلا) | ← | 1 | |
دهیهری یاز (ساخلا) | ← | 1 |
بو حالدا، سون دهیهر گؤزلهنیلن ۲-نین یئرینه ۱-دیر. بونون ندنی، آرتیم ایشلملرینین بورادا بیر-بیرینی استثنا ائتمهمهسیدیر. قارشیلیقلی استثنالی ایشلملر مموری آدرسی کیمی بعضی قایناقلارا گیررکن کسیله بیلمهین ایشلملردیر.
آشاغیدا گولنگ یازیلیملاما دیلینده یازیلان پروقرامدا بیردن چوخ گوروتین (گو دیلینده ائش زامانلی ایپ و یا ایشلم آنلامیندا) عینی واختدا counter دییشگهنینی آرتیریر. بو ایشلم وئرییی اوخودوقدان سونرا یازماسینا گؤره اتومیک (atomic) بیر ایشلم دئییل. mutex و یا کانال کیمی دوزگون بیر سینک مکانیزمی قوللانیلمادیغینا گؤره، counter دییشگهنین سون دهیهری گؤزلندیغی کیمی اولمایا بیلهجهیی یاریشما دورومونا گتیریب چیخارا بیلر.
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
var counter int
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
counter++ // Accessing and modifying the counter concurrently without synchronization
wg.Done()
}()
}
wg.Wait()
fmt.Println("Final Counter:", counter)
}
بو یاریشما دورومونو دوزلتمک اوچون mutex کیمی سینک مکانیزملری قوللانیلا بیلر. موتئکسی قوللانماق اوچون پروقرام بئله دییشه بیلر:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
var counter int
var mu sync.Mutex // Mutex to synchronize access to counter
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
mu.Lock() // Acquire the lock before accessing/modifying the counter
counter++
mu.Unlock() // Release the lock after modifying the counter
wg.Done()
}()
}
wg.Wait()
fmt.Println("Final Counter:", counter)
}
قایناقلار
[دَییشدیر]اینگیلیسجه ویکیپدیاسینین ایشلدنلری طرفیندن یارانمیش«Race condition»، مقالهسیندن گؤتورولوبدور. (۱ آپریل ۲۰۲۴ تاریخینده یوْخلانیلیبدیر).