یاریشما دورومو

یاریشما دورومو (اینگیلیسجه: 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»، مقاله‌سیندن گؤتورولوبدور. (۱ آپریل ۲۰۲۴ تاریخینده یوْخلانیلیبدیر).