ThreadSanitizer (TSan) ไม่สามารถตรวจจับข้อผิดพลาดการแข่งขัน (data race) ได้อย่างสมบูรณ์ในภาษา Go เนื่องจากข้อจำกัดทางสถาปัตยกรรม โดยเฉพาะเมื่อข้ามขอบเขตของเส้นทางการประมวลผล 255 เส้น ซึ่งพบได้บ่อยในบริการเว็บที่ใช้ Go สร้าง goroutine ต่อคำขอ งานวิจัยจาก PhD thesis ปี 2025 ของ Farzam Dorostkar ชี้ให้เห็นช่องโหว่ของ TSan v3 ที่ซ่อนข้อผิดพลาดระหว่าง goroutine ที่ใช้ slot เดียวกันใน sync.Pool แม้จะอยู่ใน pool ที่ไม่เกี่ยวข้อง ตัวอย่างการทดสอบแสดงว่าโปรแกรมนับตัวเลขที่มีการแข่งขันอาจผ่านการทดสอบปกติ แต่ TSan ตรวจจับได้เมื่อเพิ่มโหลด ข้อจำกัดของ TSันไม่ได้หมายความว่าเครื่องมือแย่ แต่ผู้ใช้ควรรู้ข้อจำกัดเพื่อใช้งานอย่างมีประสิทธิภาพ
อ่านต้นฉบับtheconsensus.dev/p/2026/09/06/data-races-and-the-limits-of-threadsanitizer-in-c-and-go.html
ThreadSanitizerGoData RaceSync.Pool
สรุปด้วย MAF Local AI · เนื้อหาต้นฉบับเป็นของแหล่งข่าว