نوشته شده توسط
babak.h
بله درسته به این حالت میگن Race Condition یعنی دو Thread می خواهند همزمان به یک شیء که در حافظه مشترک قرار دارد دسترسی پیدا کنند
توجه کنید که در دات نت هر thread حافظه stack خودش را دارد ولی حافظه Heap بین آنها مشترک است.
حالا برای حل این مشکل روش های مختلفی وجود دارد
ساده ترین (و معمولا بهترین) روش در دات نت استفاده از Monitor یا lock است (هر دوتاش در واقع یک کار انجام میده)
یعنی یک آبجکت (هرچیزی که باشه مثلا bool) تعریف میکنید بعنوان قفل و هر دو Thread قبل از اینکه بخوان به اون شی مشترک (در مثال شما label) دسترسی پیدا کند قبلش باید سعی کند اون قفل را قفل کند اگر نتونست یعنی Thread دیگری قبلا اون رو قفل کرده و در حال استفاده است پس باید منتظر بمونه تا کار اون Thread تموم بشه بعد قفل رو قفل کنه و کارش رو شروع کنه
همه ی این کار ها در دات نت به راحتی با دستور lock انجام میشه.
من اینجا مفهوم هم زمانی رو سعی کردم توضیح بدم
سایر روش ها استفاده از Mutex ٬ Semaphore و...