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

ویکی‌پدیادان، آچیق بیلیک‌لیک‌دن

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