Windows ใช้ค่าเริ่มต้นในการล็อกไฟล์โดยอัตโนมัติ UNIX ใช้ค่าเริ่มต้นเป็นการล็อกไฟล์แบบร่วมมือกัน ในทั้งสองกรณีค่าเริ่มต้นสามารถ overriden แต่ในทั้งสองกรณีพวกเขามักจะไม่
รหัส Windows เก่าจำนวนมากใช้ C / C ++ API (ฟังก์ชั่นที่ต้องการfopen
) มากกว่า API ดั้งเดิม (ฟังก์ชั่นที่ชอบCreateFile
) C / C ++ API ไม่มีวิธีการระบุว่าการล็อกบังคับจะทำงานอย่างไรดังนั้นคุณจะได้รับค่าเริ่มต้น "โหมดการแบ่งปัน" ที่เป็นค่าเริ่มต้นมีแนวโน้มที่จะห้ามการดำเนินการ "ที่ขัดแย้งกัน" หากคุณเปิดไฟล์เพื่อเขียนการเขียนจะถือว่าขัดแย้งกันแม้ว่าคุณจะไม่เคยเขียนไฟล์จริงๆก็ตาม เหมือนกันสำหรับการเปลี่ยนชื่อ
และนี่คือที่ที่มันแย่ลง นอกจากการเปิดอ่านหรือเขียนแล้ว C / C ++ API ยังไม่มีวิธีระบุสิ่งที่คุณตั้งใจจะทำกับไฟล์ ดังนั้น API จะต้องสมมติว่าคุณกำลังดำเนินการทางกฎหมายใด ๆ ตั้งแต่ล็อคมีผลบังคับใช้เป็นopen
ที่ช่วยให้การดำเนินการที่ขัดแย้งกันจะได้รับการปฏิเสธแม้ถ้ารหัสไม่เคยตั้งใจที่จะดำเนินการขัดแย้งกัน แต่เป็นเพียงการเปิดไฟล์เพื่อวัตถุประสงค์อื่น
ดังนั้นหากรหัสใช้ C / C ++ API หรือใช้ Native API โดยไม่ต้องคำนึงถึงปัญหาเหล่านี้โดยเฉพาะพวกเขาจะปิดท้ายการป้องกันชุดปฏิบัติการที่เป็นไปได้สูงสุดสำหรับทุกไฟล์ที่พวกเขาเปิดและไม่สามารถเปิดไฟล์ได้ สามารถดำเนินการกับมันเมื่อเปิดไม่มีข้อโต้แย้ง
ในความคิดของฉันวิธี Windows จะทำงานได้ดีกว่าวิธี UNIX ถ้าทุกโปรแกรมเลือกโหมดการแบ่งปันและเปิดโหมดอย่างชาญฉลาดและจัดการกรณีความล้มเหลวอย่างชาญฉลาด อย่างไรก็ตามวิธี UNIX จะทำงานได้ดีขึ้นถ้ารหัสไม่ต้องกังวลกับปัญหาเหล่านี้ น่าเสียดายที่ C / C ++ API พื้นฐานไม่ได้จับคู่กับไฟล์ Windows API ในวิธีที่จัดการโหมดการแชร์และการเปิดที่ขัดแย้งกันได้ดี ดังนั้นผลลัพธ์สุทธิจึงค่อนข้างยุ่ง