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


