TSA เป็นเครื่องมือการวิเคราะห์แบบคงที่สำหรับเสียงดัง
โดยการเพิ่มคำอธิบายประกอบ (แอตทริบิวต์) ลงในซอร์สโค้ดที่ใช้ POSIX เธรด API และรวบรวมด้วย
clang -Wthread-safety
ซอร์สโค้ดถูกวิเคราะห์ในเวลาคอมไพล์สำหรับรูปแบบการล็อคที่ไม่ปลอดภัยซึ่งจะนำไปสู่การแข่งขันข้อมูลหรือการหยุดชะงักหรือทั้งสองอย่าง
เอกสารอย่างเป็นทางการสำหรับ TSA คือ
https://clang.llvm.org/docs/threadsafetyanalysis.html
ในขณะที่หน้านั้นพูดถึงการใช้ TSA กับ C ++ แต่ก็เป็นไปได้ที่จะใช้ฟังก์ชั่นส่วนใหญ่กับ C. Plain C.
ในความเป็นจริงแล้วทำไมที่เก็บนี้จึงมีอยู่
tsa.h ลงในรหัสของคุณที่คุณใช้ Posix Mutexes เพื่อประสานงานการเข้าถึงข้อมูลของ Posix Threadstsa_mutex แทน pthread_mutex_tclang -Wthread-safetyคุณสามารถดูการใช้ตัวอย่างและข้อผิดพลาดที่เกิดจากการออก
make
แต่ละโปรแกรมตัวอย่างแสดงข้อผิดพลาดประเภทหนึ่ง
ตัวอย่างเช่น:
tsa_mutex mut;
int g TSA_GUARDED_BY(&mut);
int main {
g = 1; // This would be bad.
}
เพื่อดูวิธีแก้ไขปัญหาปัญหา
make pass
และศึกษาโปรแกรมตัวอย่าง
สาขาแรกของ #ifndef TSA_PASS แสดงวิธีที่ผิด (ซึ่งอาจเป็น: "ไม่ทำอะไรเลย") ในขณะที่สาขาที่สองคือ #else แสดงวิธีที่ถูกต้อง
TSA ไม่ใช่ สิ่งเดียวกับ สารฆ่าเชื้อในด้าย หรือ TSAN
TSA นั้นรวบรวมเวลาอย่างสมบูรณ์ในขณะที่เครื่องฆ่าเชื้อแบบเธรดเพิ่มเครื่องมือวัดให้กับเอาต์พุตคอมไพเลอร์เพื่อให้รันไทม์สามารถตรวจจับการแข่งขันของข้อมูลในระหว่างการดำเนินการ เครื่องมือที่เพิ่มเข้ามาเพิ่มค่าใช้จ่ายในการดำเนินการและค่าใช้จ่ายหน่วยความจำค่อนข้างมาก ไม่มีสิ่งนี้เกิดขึ้นกับ TSA
เท่าที่ฉันรู้ว่า TSA มีให้เฉพาะสำหรับ clang ไม่ใช่ gcc มันควรจะพร้อมใช้งานอย่างเต็มที่ตั้งแต่ Clang 3.6
tsa.h มีการแจกจ่ายภายใต้ใบอนุญาต MIT ซึ่งเข้ากันได้กับใบอนุญาต Clang (LLVM): http://llvm.org/docs/developerpolicy.html#license
ใบอนุญาตนั้นทั้งสอง inlined to tsa.h และมีให้เป็นใบอนุญาตไฟล์แยกต่างหากโดยตรงจาก https://opensource.org/licenses/mit
ฉันจะไม่เจาะลึกเรื่องนี้หากไม่มีโครงการ Perl 5 หนึ่งในโหมดการสร้างของ Perl 5 คือการสร้างด้วยการรองรับเธรด Posix และเพื่อตรวจสอบเหตุผลของเหตุผลนั้นฉันพบว่าเสียงดังกึกก้องมี TSA Perl 5 Porters (โครงการพัฒนาและบำรุงรักษา Perl 5) ช่วยในการทดสอบ TSA C API ขอบคุณเป็นพิเศษสำหรับ Craig Berry และ Jerry Hedden คุณจะพบบางสิ่งที่เหมือนกับ tsa.h เป็นส่วนหนึ่งของ Perl.h ในซอร์สโค้ด Perl 5 ซึ่งได้รับความอนุเคราะห์จากตัวเอง
Jarkko Hietaniemi <[email protected]>