Ushbu yechim prodyuserning buferda bo'sh joy qolguncha uxlashini ta'minlaydi. Aksincha, iste'molchi iste'mol qilinadigan narsalar qolguncha uxlaydi.
Bu muammo bir xil ma'lumotlar to'plamida ishlaydigan bir nechta va . Jarayonlar faqat ma'lumotlar to'plamini o'qiydi; ular hech qanday yangilanishlarni amalga oshirmaydi. Holbuki, jarayonlar ham o'qishi, ham yozishi mumkin.
Bizda mavjud sinxronizatsiya muammosi istalgan vaqtda ma'lumotlar to'plamiga kirish uchun faqat bitta yozuvchiga ruxsat berishdir. Biz bir vaqtning o'zida bir nechta o'quvchilarga muammosiz o'qishga ruxsat berishimiz mumkin.
Bizda ma'lumotlar to'plamida qulf bor deb taxmin qiling. Birinchisi ma'lumotlar to'plamini qulflashi kerak, keyin esa davom etishi va o'qishni boshlashi mumkin. Oxirgisi o'qishni tugatgandan so'ng qulfni bo'shatishi kerak.
A o'qishni boshlaganda yoki o'qishni to'xtatganda, u boshqa va uchun ma'lumotlar to'plamini bloklashi/qulfini ochishi kerak .
Ushbu muammoda jarayonni sinxronlashtirishni yoqish uchun biz butun son va ikkita semafordan foydalanishimiz mumkin.
Faylga kirish sonini bildiruvchi butun sonni nolga tenglashtiramiz. Bu semafor emas, faqat butun son.
Shuningdek, keling, semaforni 1 ga ishga tushiramiz, bu o'zgaruvchini bir nechta jarayonlar tomonidan yangilanishidan himoya qiladi.
Nihoyat, keling, semaforni 1 ga ishga tushiramiz deb faraz qilaylik, bu ma'lumotlar to'plamiga bir vaqtning o'zida bir nechta tomonidan kirishdan himoya qiladi . Shunday qilib, psevdokod va jarayonlar:
Bunday holda, semaforda faqat kutish va signallar . Agar u semaforni qo'lga kirita olsa, u davom etishi mumkin. Aks holda, kutish operatsiyasi uni bloklaydi.
Yozish jarayoni tugashi bilan yozuvchi semaforga signal beradi . Shunday qilib, boshqa jarayonlar ma'lumotlar to'plamiga kirishi mumkin.
A ning ish jarayoni ancha murakkab. U qiladigan birinchi narsa - ni oshirish . Buning uchun qiymatni o'zgartirish uchun semaforga ega bo'lish , unga bir vaqtning o'zida bir nechta jarayonlar tomonidan kirmasligiga ishonch hosil qilish kerak.
Agar hozirda ma'lumotlar to'plamiga boshqa hech kim kirmasa, o'sish operatsiyasidan keyin bitta bo'ladi. Bunday holda, hech qanday yozuvchi kirmasligiga ishonch hosil qilish uchun ma'lumotlar to'plamiga kirishdan oldin semaforda kutiladi .
Semaforni bo'shatgandan so'ng , davom etadi va o'qish operatsiyasini bajaradi.
Nihoyat , ma'lumotlar to'plami bilan ishlash tugagach, u qiymatni kamaytirishi kerak. Yana, u semaforni oladi, o'zgaruvchini o'zgartiradi va nihoyat semaforni chiqaradi .
Do'stlaringiz bilan baham: |