ซิงโครไนซ์กระบวนการ C++ สองกระบวนการโดยใช้ไลบรารีที่ใช้ร่วมกัน

ฉันกำลังพัฒนาคลาส C ++ (MyClass.cpp) ที่ฉันจะคอมไพล์เป็นไลบรารีที่ใช้ร่วมกันแบบไดนามิก (MyClass.so)

ไลบรารีที่ใช้ร่วมกันนี้จะถูกใช้โดยแอปพลิเคชันสองตัวที่ทำงานบนเครื่อง Linux เครื่องเดียวกัน

มันเป็นสองแอปพลิเคชันที่แตกต่างกัน มันไม่ใช่แอปพลิเคชันแบบมัลติเธรด และไม่สามารถเป็นได้

ในคลาสนี้มีเมธอด MyClass::WriteHardware ที่ต้องดำเนินการโดยมีการแยกออกร่วมกัน ดังนั้นจึงเป็นไปไม่ได้ที่ทั้งสองแอปพลิเคชันจะรันพร้อมกันได้

อะไรคือวิธีที่ถูกต้องและง่ายที่สุดในการบรรลุการซิงโครไนซ์ระหว่างสองกระบวนการที่แตกต่างกัน โดยพิจารณาว่าไลบรารี MyClass.so นั้นเป็นเรื่องปกติสำหรับทั้งสองกระบวนการ

mutex จะทำงานในกรณีนี้หรือไม่ เนื่องจากไม่ใช่แอปพลิเคชันแบบมัลติเธรด


person jstechg    schedule 04.05.2020    source แหล่งที่มา
comment
แพลตฟอร์ม/ระบบปฏิบัติการใด? แนวคิดของกระบวนการไม่ได้ถูกกำหนดไว้ในมาตรฐาน C++ ดังนั้นจึงขึ้นอยู่กับแพลตฟอร์มว่าจะทำอย่างไร   -  person PeterT    schedule 04.05.2020


คำตอบ (2)


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

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

หากต้องการป้องกันไม่ให้แอปหลายแอปเขียนลงในไฟล์นี้พร้อมกัน คุณอาจใช้ไฟล์ "ล็อค" อื่น มีอยู่หมายความว่า "มีคนเขียนไปยังไฟล์แบตช์"

person Ripi2    schedule 04.05.2020

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

person Hack06    schedule 04.05.2020