TSA هي أداة تحليل ثابت لـ Clang.
عن طريق إضافة التعليقات التوضيحية (السمات) إلى رمز المصدر الذي يستخدم واجهة برمجة تطبيقات مؤشرات ترابط POSIX ، وتجميع مع
clang -Wthread-safety
يتم تحليل الرمز المصدر في وقت الترجمة لأنماط قفل غير آمنة من شأنها أن تؤدي إلى سباقات البيانات أو الجمود ، أو كليهما.
الوثائق الرسمية ل TSA
https://clang.llvm.org/docs/threadsafetyanalysis.html
في حين أن تلك الصفحة تتحدث فقط عن استخدام TSA مع C ++ ، فمن الممكن تمامًا استخدام معظم الوظائف مع CL C.
هذا هو ، في الواقع ، لماذا هذا المستودع موجود.
tsa.h في الكود الخاص بك حيث تستخدم Mutexes POSIX لتنسيق وصول POSIX Threads إلى البيانات.tsa_mutex بدلاً من pthread_mutex_t .clang -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 ليس هو نفس الشيء مثل مطهر الموضوع أو تسان .
يتم تجميع TSA بالكامل ، في حين يضيف مطهر مؤشر الترابط أجهزة إلى إخراج المترجم بحيث يمكن لوقت التشغيل اكتشاف سباقات البيانات أثناء التنفيذ. يضيف الأجهزة المضافة بعض النفقات العامة للتنفيذ ، وذاكرة كبيرة للغاية. لا شيء من هذا يحدث مع TSA.
بقدر ما أعرف أن TSA متاح فقط لـ clang ، وليس gcc . يجب أن تكون متاحة بالكامل منذ Clang 3.6.
يتم توزيع tsa.h بموجب ترخيص MIT ، وهو متوافق مع ترخيص Clang (LLVM): http://llvm.org/docs/developerpolicy.html#license
يرخص الترخيص على حد سواء إلى tsa.h ، ومتاح كترخيص ملف منفصل ، مباشرة من https://opensource.org/licenses/mit
لم أكن لأدخل في هذا دون مشروع Perl 5. تتمثل إحدى أوضاع بناء Perl 5 في البناء بدعم لخيوط Posix ، وللتحقق من منطق ذلك ، اكتشفت أن Clang لديه TSA. ساعد Perl 5 Porters (مشروع تطوير وصيانة Perl 5) في اختبار TSA C API ، وهو شكر خاص لـ Craig Berry و Jerry Hedden. ستجد شيئًا مثل tsa.h كجزء من Perl.H في قانون المصدر Perl 5 ، من باب المجاملة.
Jarkko Hietaniemi <[email protected]>