IPC ไม่ล็อคใน Linux สำหรับโปรเซสเซอร์แบบมัลติคอร์


9

ฉันกำลังพยายามหาวิธีเขียนแอปพลิเคชันด้วย IPC แบบปลอดล็อคบน Linux ใน C พร้อมตัวประมวลผลแบบมัลติคอร์

สมมติว่าฉันมีกระบวนการ 1 และกระบวนการ 2 ที่เขียนไปยัง FIFO หรือหน่วยความจำที่ใช้ร่วมกัน จากนั้นประมวลผล 3 และกระบวนการ 4 จะอ่านจากหน่วยความจำที่แชร์หรือ FIFO

เป็นไปได้ด้วยอัลกอริธึมที่ไม่ล็อคหรือไม่

คำแนะนำของคุณได้รับการชื่นชมอย่างมาก


คุณสามารถให้ข้อบ่งชี้หรืออ้างอิงถึงเอกสารภายนอกบางอย่างเกี่ยวกับการสื่อสารที่ไม่ล็อคได้หรือไม่? คำนี้มีความหมายอะไรกันแน่?
Giorgio


หากฉันเข้าใจอย่างถูกต้องปัญหาคือการเขียนพร้อมกัน (1, 2) และการอ่านพร้อมกัน (3, 4) การซิงโครไนซ์ระหว่างผู้เขียนและผู้อ่านได้รับการครอบคลุมโดยอัลกอริทึมที่อธิบายไว้ในหน้าเชื่อมโยง
Giorgio

คำตอบ:


2

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

กลไกที่ฉันเข้าใจคือ:

  • นักเขียนรอจนกว่าจะมีช่องเปิด (+1 ล่าสุด! = ปัจจุบัน)
  • นักเขียนเขียนรายการในบัฟเฟอร์แหวน
  • ตัวเขียนอัพเดตตัวชี้รายการสุดท้าย

  • ผู้อ่านรอจนกว่าจะมีรายการที่พร้อมใช้งานในบัฟเฟอร์วงแหวน (ล่าสุด! = ปัจจุบัน)

  • รายการกระบวนการอ่าน
  • เครื่องอ่านเพิ่มตัวชี้ปัจจุบัน

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


และฉันได้พบสิ่งนี้บนวิกิพีเดียมันดูน่าสนใจแล้วยังไม่ได้ลองแม้ว่าconcurrencykit.org
โพสต์

1

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


0

การสื่อสารระหว่างกระบวนการไม่สามารถล็อคได้ฟรี เฉพาะเธรด เท่าที่ฉันรู้


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