Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Компьютерлік ғылымда сабақтастық мәселесі
Computer science problem in concurrency
Компьютерлік ғылымда оқырмандар-жазушылар мәселесі сабақтастықтағы жиі кездесетін есептеу мәселесінің мысалы болып табылады. Мұндай мәселенің кем дегенде үш түрі бар, олар бір уақытта бірдей ортақ ресурсқа қол жеткізуге тырысатын көптеген параллель орындалу тізбектерінің жағдайларын қарастырады. Кейбір тізбектер оқи алады, ал кейбіреулері жаза алады, бірақ екінші тізбек оған жазу кезінде оқу немесе жазу үшін ортақ ресурсқа кіре алмайды. (Атап айтқанда, ортақ ресурсты бір уақытта бірнеше тізбек өзгертуіне жол бермей, екі немесе одан да көп оқырманға ортақ ресурсқа бір уақытта қол жеткізуді қамтамасыз ету қажет). Оқырман-жазушы құлпы – оқырман-жазушы мәселелерінің бірін немесе бірнешеуін шешетін дерек құрылымы. Негізгі оқырман-жазушы мәселесін алғаш рет Куртуа және авторлар тұжырымдап, шешкен.
In computer science, the readers–writers problems are examples of a common computing problem in concurrency. There are at least three variations of the problems, which deal with situations in which many concurrent threads of execution try to access the same shared resource at one time. Some threads may read and some may write, with the constraint that no thread may access the shared resource for either reading or writing while another thread is in the act of writing to it. (In particular, we want to prevent more than one thread modifying the shared resource simultaneously and allow for two or more readers to access the shared resource at the same time). A readers–writer lock is a data structure that solves one or more of the readers–writers problems. The basic reader–writers problem was first formulated and solved by Courtois et al.
Ең қарапайым оқушы-жазушы мәселесі
Ең қарапайым оқушы-жазушы мәселесі, ол тек екі семафорды пайдаланады және буфердегі деректерді оқу үшін оқырмандар тізімі қажет емес. Бұл шешімнің жалпы жағдайдан қарапайым екенін ескеріңіз, себебі ол шектелген буфер мәселесімен бірдей, сондықтан буфердің көлеміне дейін тек оқырмандар ғана параллель түрде кіре алады.
The simplest reader writer problem which uses only two semaphores and doesn't need an array of readers to read the data in buffer. Please notice that this solution gets simpler than the general case because it is made equivalent to the Bounded buffer problem, and therefore only readers are allowed to enter in parallel, being the size of the buffer.
Алгоритм
Оқушы оқу семафоры оқылғандықтан жазушының артынан қуады. Жазушы жазу семафоры 0-ге жеткенде жазуды тоқтатады. Оқушы оқу семафоры 0-ге жеткенде оқуды тоқтатады. Жазушыда жазу семафорының мәні оқу семафорына беріледі, ал оқушыда оқу аяқталған соң оқу мәні жазу семафорына беріледі.
Reader will run after Writer because of read semaphore. Writer will stop writing when the write semaphore has reached 0. Reader will stop reading when the read semaphore has reached 0. In writer, the value of write semaphore is given to read semaphore and in reader, the value of read is given to write on completion of the loop.