การใช้ชนิดที่เป็นเอกลักษณ์เพื่อสร้างความเท่าเทียมที่ปลอดภัย


19

ฉันสนใจประเภทที่เป็นเอกลักษณ์ซึ่งเป็นทางเลือกแทนพระในภาษาที่ใช้งานได้จริงในบางครั้ง โชคไม่ดีที่นี่เป็นพื้นที่ลึกลับของการวิจัย CS และแหล่งข้อมูลออนไลน์เกี่ยวกับการเขียนโปรแกรมที่มีประเภทที่ไม่ซ้ำใคร

เห็นได้ชัดว่าประเภทที่ไม่ซ้ำกันอาจถูกนำมาใช้ในการใช้โครงสร้างข้อมูลแบบรัฐเช่นการอ้างอิง ("กล่อง") และอาร์เรย์ได้อย่างไรแม้ว่ามันจะช่วยฉันได้อย่างไรว่าคุณจะใช้โครงสร้างข้อมูลแบบรัฐอื่น ๆ ร่วมกันอย่างไร

มันเป็นไปได้ที่จะใช้เช่นล็อคด้วยประเภทที่ไม่ซ้ำกัน? สามารถใช้ประเภทที่ไม่ซ้ำกันเพื่อแชร์ข้อมูลที่ไม่แน่นอนในเธรดได้หรือไม่? เป็นไปได้หรือไม่ที่จะใช้ชนิดที่ไม่ซ้ำกันเพื่อสร้างการซิงโครไนซ์ดั้งเดิม (เช่น mutexes) หรือจำเป็นต้องส่งข้อความ


คุณทำให้คำถามของคุณเจาะจงมากขึ้นได้ไหม? ยกตัวอย่างเช่นคุณรู้อะไรบ้างเกี่ยวกับการล็อคด้วยประเภทที่ไม่เหมือนใครและความรู้ของคุณเองไม่เพียงพอ?
Robert Harvey

> คุณรู้อะไรบ้างเกี่ยวกับการล็อคด้วยประเภทที่ไม่เหมือนใครฉันไม่รู้อะไรเกี่ยวกับการล็อคด้วยประเภทที่ไม่เหมือนใคร - ฉันไม่รู้จริงๆว่าการทำงานแบบคู่ขนานที่ปลอดภัยกับประเภทที่ไม่เหมือนใครหรือไม่และอยากรู้ว่ามีอะไรบ้าง เป็นทรัพยากรใด ๆ ในหัวข้อ
Ricky Stewart


2
@RickyStewart: คุณคงรู้จัก Clean ( wiki.clean.cs.ru.nl/Clean ) เรียบร้อยแล้ว ฉันแค่อยากจะเพิ่มลิงค์เพราะคุณไม่ได้พูดถึงมัน
Giorgio

ฉันคิดว่าคุณควรพิจารณาประเภทเชิงเส้นสำหรับการขนาน IIRC ประเภทที่ไม่ซ้ำกันถูกสร้างขึ้นในประเภทเชิงเส้น Frank Pfenning มีเนื้อหาที่น่าสนใจในเรื่องนี้
Daniel Gratzer

คำตอบ:


2

มันเป็นไปได้ที่จะใช้เช่นล็อคด้วยประเภทที่ไม่ซ้ำกัน?

ฉันไปตามลิงก์ที่ Robert Harvey จัดหาให้และฉันก็ทำการอ่านอย่างรวดเร็ว ฉันไม่สามารถพูดได้ว่าฉันเข้าใจทุกอย่างหรือว่าฉันมีความมั่นใจในระดับสูงว่าฉันเข้าใจในสิ่งที่ฉันคิดว่าจริง ๆแล้ว แต่สำหรับฉันแล้วดูเหมือนว่าจุดรวมของความเป็นเอกลักษณ์ภายนอกและการเปลี่ยนแปลงที่ไม่สามารถอ้างอิงได้

วิธีการใหม่ในการมัลติเธรดพยายามหลีกเลี่ยงการล็อกเนื่องจากโปรแกรมเมอร์ที่มีประสบการณ์สูงเท่านั้นที่สามารถเขียนโค้ดที่ใช้การล็อกได้และแม้แต่รหัสของพวกเขาก็มีแนวโน้มที่จะมีข้อบกพร่องสูง หากคุณเพิ่มความจริงที่ว่ารหัสล็อคนั้นไม่สามารถพิสูจน์ได้จริงมันควรจะเห็นได้ชัดว่ามันเป็นวิธีที่ไม่พึงประสงค์อย่างมากในการทำสิ่งต่าง ๆ และวิธีการแก้ปัญหาที่มีเป้าหมายเพื่อปลดปล่อยเราจากการล็อกนั้น

วิธีที่เราหลีกเลี่ยงการล็อคคือการส่งผ่านข้อความซึ่งกำหนดให้ข้อความต้องไม่เปลี่ยนรูป โดยประมาณ (ในภาพรวมก่อนหน้า) การเปลี่ยนแปลงไม่ได้อ้างอิงเป็นเทคนิคที่สามารถช่วยให้เรารับประกันความไม่สามารถเปลี่ยนแปลงได้โดยไม่ต้องสร้างประเภทที่ไม่เปลี่ยนรูปแบบและลักษณะภายนอกที่ไม่เหมือนใครเป็นเทคนิคที่สามารถช่วยให้เราผ่อนคลาย

สามารถใช้ประเภทที่ไม่ซ้ำกันเพื่อแชร์ข้อมูลที่ไม่แน่นอนในเธรดได้หรือไม่?

กระดาษไม่ได้ระบุอย่างชัดเจน แต่จากสิ่งที่ฉันเข้าใจกลุ่มวัตถุที่ไม่ซ้ำกันภายนอกนั้นมีความปลอดภัยเนื่องจากเธรด (อย่างใดอย่างไรได้อย่างไร ) รับประกันได้ว่ามีการอ้างอิงภายนอกเพียงหนึ่งเดียวในกลุ่มของวัตถุนั้นซึ่งหมายความว่า เธรดที่ได้รับการอ้างอิงดังกล่าวสามารถปฏิบัติต่อวัตถุที่อ้างอิงว่าไม่แน่นอนโดยไม่ต้องกังวลว่าเธรดอื่น ๆ อาจกลายพันธุ์ได้เช่นกันเพราะไม่มีเธรดอื่นใดที่สามารถมีการอ้างอิงอื่นได้ ฉันอยากรู้อยากเห็นว่าโครงสร้างทางทฤษฎีสามารถนำไปใช้และบังคับใช้ได้อย่างไร

เป็นไปได้หรือไม่ที่จะใช้ชนิดที่ไม่ซ้ำกันเพื่อสร้างการซิงโครไนซ์ดั้งเดิม (เช่น mutexes) หรือจำเป็นต้องส่งข้อความ

อีกครั้งจากสิ่งที่ฉันเข้าใจประเภทที่ไม่ซ้ำกันจากภายนอกและความไม่เปลี่ยนรูปแบบการอ้างอิงหมายถึงการแสดงการล็อก, การปิดท้าย, และสิ่งที่ไม่จำเป็นเช่นนั้น การส่งข้อความดูเหมือนจะเป็นวิธีที่จะไปและก็ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.