چندتاری یا چند نخی thread توانایی یک برنامه در تقسیم شدن به چند تار (زیربرنامه) است که می‌توانند جداگانه و در عین حال همزمان توسط رایانه اجرا شوند. یک رایانه چندپرداز می‌تواند همزمان دو یا چند تار را اجرا کند که به معنی اجرای زودتر کل برنامه نسبت به رایانه تک‌پرداز است. بر روی یک رایانه تک‌پردازنده یک برنامه چند تاری زودتر اجرا نمی‌شود اما یک نرم‌افزار کاربردی چندتاره ممکن است با کاربر اندرکنش بیشتری داشته باشد زیرا چندین فعالیت در نرم‌افزار همزمان اجرا می‌شوند. نرم‌افزارهای سنتی تک‌تار بر روی سیستم‌های چندپردازنده سریع‌تر اجرا نمی‌شوند زیرا آن نرم‌افزارها در هر زمان می‌توانند تنها یک پردازنده را به کار بگیرند.ی

Thread ها پراسس ها کوچکی هستند که هر کدام تنها یک هدف رو انجام می دن و در نهایت پس از پایان یافتن اجرای مجموعه thread ها یک برنامه یا یک پراسس اصلی پایان پیدا می کنه. از thread برای انجام کارهای موازی همزمان استفاده میشه. اکثر برنامه هایی که ما می نویسیم فقط یک thread دارند که همون پراسس اصلی ماست و با پایان یافتن اون، برنامه هم به پایان میرسه.
    در سی شارپ از کلاس system.Threading.Thread برای کار با نخ ها استفاده میشود. این کلاس اجازه ایجاد و دسترسی به هر نخ را در برنامه های چند نخی میدهد. اولین نخی که باید اجرا شود را نخ اصلی (Main Thread) میگویند. وقتی یک برنامه سی شارپ اجرا میشود، نخ اصلی به صورت خودکار ایجاد میشود. نخ های ایجاد شده به وسیله کلاس Thread نخ های فرزند نامیده میشوند. شما میتوانید با استفاده از صفت CurrentThread از کلاس Thread به یک نخ دسترسی داشته باشید. 
C# با استفاده از کلاس Monitor همگام سازی نخ ها را انجام میدهد. کلاس Monitor متدهایی را برای قفل کردن اشیا فراهم میکند تا دستیابی همگام به داده مشترک را پیاده سازی نماید. قفل کردن شیء به این معناست که در هر زمان فقط یک نخ میتواند به آن شیء دستیابی داشته باشد. وقتی نخی بخواهد دستیابی انحصاری به شی ءای داشته باشد متد Enter مربوط به کلاس Monitor را فراخوانی میکند تا آن شی را قفل کند. هر شی دارای یک SyncBlock است که وضعیت قفل آن شی را نگهداری میکند. وقتی نخ بر روی شی ای قفل ایجاد کرد میتواند داده های آن شی را دستکاری کند و سایر نخ ها مسدود میشوند. وقتی نخ بخواهد قفل را باز کند متد Exit مربوط به کلاس Monitor را فراخوانی میکند. این متد SyncBlock مربوط به شی داده مشترک را به هنگام میکند تا نشان دهد که آن شی قفل شده نیست. 
براتون یه سورس میذارم که بصورت بسیار ساده این عمل رو نشون میده


دانلود سورس threading  لود باتن