Хуулахаар нь бичих

Чөлөөт нэвтэрхий толь — Википедиагаас
Харайх: Удирдах, Хайлт

Хуулахаар нь бичих (Copy on Write - COW)[засварлах]

Өгөгдлийн сан нь хэд хэдэн тооны процессын дагалдах нөхцөл дунд явагддаг. Тэдгээрийн зарим процесс нь зөвхөн өгөгдлийн санг хуулахыг оролддог ба бусад нь өгөгдлийн санг шинэчлэхийг хүсдэг(Өөрөөр хэлбэл хуулах ба бичих). Бид энэ 2 процессын төрлийн дунд хуучин юу уншсан ба саяхан юу бичсэн ялгааг олдог. Мэдээж, хэрвээ 2 хуулах өгөгдлийг хамтарч уншихыг зөвшөөрвөл үр дүнд нь сөргөөр нөлөөлдөггүй. Гэвч, хэрвээ хуулах ба зарим салбар процесс өгөгдлийн санг хамтарч ашиглахыг зөвшөөрвөл (хуулах эсвэл бичигчийн аль нэгэнд) эмх замбараагүй байдал үүсдэг. Энд гарч ирсэн бэрхшээлүүд нь үүсэх нь хүндрэлтэй биш ба бидэнд өгөгдлийн санг бичигч ганцаараа хуваалцах онцгой эрх олгох хэрэгтэй болдог. Энэ нь хуулах-бичигч хоёрт нэгэн зэрэг цаг зарцуулах асуудал үүсгэдэг. Үүнээс хойш бүтэц нь өвөрмөц, ба энэ нь дандаа шинээр нэгэн зэрэг ойрхон шалгагддаг. Хуулах-бичигчийн асуудал нь хэд хэдэн хувилбартай ба бүгдэд нь давуу эрх олгогддог. Энгийнээр нэгдүгээрт хуулах бичигчийн асуудалд хуулах нь хэн нэгнээс хараат биш боловч бичигч биет юмстай хуваалцахыг аль хэдийн зөвшөөрөхөд хүрсэн үед хамааруулдаг. Хоёрдугаарт хуулах бичигчийн асуудал нь бичигч нь нэг удаа бэлэн байхад бичилт гүйцэтгэх энэ нь бичигч удалгүй боломжтой болдог. Өөрөөр хэлбэл, хэрвээ бичигч биет юмсын зөвшөөрөлийг хүлээж байхад шинэ хуулах магадгүй эхэлж уншидгүй. Хуулах-бичигчийн асуудал ба эдгээр бэрхшээлүүдийг ерөнхийдөө зарим систем дээр Хуулах-бичигчийн түгжээ гүйцэтгэдэг.

Жишээ программ:


                                std::string x("Hello");
                                std::string y = x;  // x and y use the same buffer
                                y += ", World!";    // now y uses a different buffer
                                                    // x still uses the same old buffer


Дэлгэрэнгүйг эндээс: Wikipedia