Semaphore vs Mutex
Semaphore არის მონაცემთა სტრუქტურა, რომელიც გამოიყენება იმისთვის, რომ დარწმუნდეს, რომ მრავალ პროცესს არ აქვს წვდომა საერთო რესურსზე ან კრიტიკულ განყოფილებაზე ერთდროულად, პარალელურ პროგრამირების გარემოში. სემაფორები გამოიყენება მკვდარი ბლოკირებისა და რბოლის პირობების თავიდან ასაცილებლად. Mutex (ურთიერთგამორიცხვის ობიექტი) ასევე გამოიყენება საერთო რესურსზე წვდომის თავიდან აცილების მიზნით რამდენიმე ერთდროულად პროცესით.
რა არის სემაფორი?
Semaphore არის მონაცემთა სტრუქტურა, რომელიც გამოიყენება კრიტიკული სექციების ურთიერთგამორიცხვის უზრუნველსაყოფად. სემაფორები ძირითადად მხარს უჭერენ ორ ოპერაციას, რომელსაც ეწოდება ლოდინი (ისტორიულად ცნობილია როგორც P) და სიგნალი (ისტორიულად ცნობილია როგორც V).ლოდინის ოპერაცია ბლოკავს პროცესს, სანამ სემაფორი არ გაიხსნება და სიგნალის ოპერაცია საშუალებას მისცემს სხვა პროცესს (ძაფს) შევიდეს. თითოეული სემაფორი ასოცირდება ლოდინის პროცესების რიგთან. როდესაც ლოდინის ოპერაცია გამოიძახება ძაფით, თუ სემაფორი ღიაა, ძაფი შეიძლება გაგრძელდეს. თუ სემაფორი დახურულია, როდესაც ლოდინის ოპერაცია გამოიძახება ძაფით, ძაფი იბლოკება და მას უნდა დაელოდოს რიგში. სიგნალის ოპერაცია ხსნის სემაფორს და თუ რიგში უკვე ელოდება ძაფი, ეს პროცესი ნებადართულია გაგრძელდეს და თუ რიგში არ არის ძაფები, მაშინ სიგნალი იმახსოვრებს შემდეგ ძაფებს. არსებობს ორი ტიპის სემაფორები, რომლებსაც უწოდებენ მუტექს სემაფორებს და მთვლელ სემაფორებს. Mutex-ის სემაფორები საშუალებას აძლევს ერთჯერად წვდომას რესურსზე და დამთვლელი სემაფორები საშუალებას აძლევს რამდენიმე ძაფს წვდომას რესურსზე (რომელშიც ხელმისაწვდომია რამდენიმე ერთეული).
რა არის Mutex?
როდესაც კომპიუტერული აპლიკაცია დაიწყება, ის შექმნის მუტექსს და დაუერთებს მას რესურსს.როდესაც რესურსს იყენებს თემა, ის დაბლოკილია და სხვა ძაფები ვერ გამოიყენებენ მას. თუ სხვა თემას სურს გამოიყენოს იგივე რესურსი, მას მოუწევს მოთხოვნის გაკეთება. შემდეგ ეს თემა განთავსდება რიგში მანამ, სანამ პირველი თემა არ დასრულდება რესურსით. როდესაც პირველი თემა დასრულდება რესურსით, დაბლოკვა მოიხსნება და რიგში, რომელიც ელოდება, რესურსზე წვდომას მიიღებს. თუ რიგში ელოდება რამდენიმე თემა, მათ ეძლევათ წვდომა მონაცვლეობით. პრაქტიკულად, როდესაც mutex ცვლის რესურსზე წვდომას რამდენიმე ძაფს შორის, ის ხილული იქნება, რადგან რამდენიმე თემა ერთდროულად მოიხმარს რესურსს. მაგრამ შინაგანად მხოლოდ ერთი თემა წვდება რესურსზე მოცემულ დროს.
რა განსხვავებაა Semaphore-სა და Mutex-ს შორის?
მიუხედავად იმისა, რომ სემაფორები და მუტექსის ობიექტები გამოიყენება პარალელურ პროგრამირების გარემოში ურთიერთგამორიცხვის მისაღწევად, მათ აქვთ გარკვეული განსხვავებები.mutex ობიექტი საშუალებას აძლევს მხოლოდ ერთ ძაფს მოიხმაროს რესურსი ან კრიტიკული განყოფილება, მაშინ როდესაც სემაფორები იძლევიან რესურსზე ერთდროული წვდომის შეზღუდულ რაოდენობას (მაქსიმალური დაშვებული რაოდენობის ქვეშ). mutex ობიექტებით, სხვა ძაფებს, რომლებსაც სურთ რესურსზე წვდომა, უნდა დაელოდონ რიგში, სანამ მიმდინარე თემა არ დასრულდება რესურსის გამოყენებით.