بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

تغییر متغیر داخل Thread و احتمال کرش

مدیریت گفتگو
MJ 13 سال پیش
آخرین تغییر: 13 سال پیش

با سلام مجدد خدمت استاد عزیز
سوالی که در مورد تردها برای من پیش اومده:
با توجه به اینکه نباید از ترد ui یا هر جای دیگری که ترد worker رو تولید و استارت کرده استوپش کرد ، یک راه استفاده از فلگیه که توست پدر ست بشه و تردمون اونو چک کنه.
سوالی که برام ایجاد شده مشکل دسترسی به منابع برای این متغیر پیش نمیاد ؟
باید از سمافور و.. استفاده بشه؟
با تشکر.

نظرات

پاسخ‌ها 1

uncocoder 13 سال پیش

در شرایط بسیار ساده، ایجاد یک subclass از Thread است که داخل اون متغیری مثلاً به نام mustStop وجود داره و داخل متد run چک میشه. در اینصورت کالاً safe هست.

استفاده از سمافور و ... در جاهای بسیار پیچیده تر کاربرد داره که معمولاً در پروژه ها پیش نمیاد مگر پروژه های بسیار پیچیده و پر پردازش.

نظرات

MJ 13 سال پیش
با تشکر از جوابتون، من یه چیزی هنوز برام گنگه و اونم اینکه همین متغیر کلاس اگر در زمانی که داره توسط ترد UI آپدیت میشه ، توسط متد run ترد worker چک بشه ، و یا بر عکس در زمانی که متد run در حال چک کردنشه ، ترد UI بخواد تغییرش بده مشکلی پیش نمیاد؟ به عبارتی دسترسی همزمان به یک منبع در این حالت خود به خود مدیریت شده یا خیر.
uncocoder 13 سال پیش
آفرین به شما، مشخص هست که معنی همزمانی رو به خوبی می دونید. خواندن و نوشته شدن همزمان برای متغیر های از نوع primitive مثل boolean، از آنجاییکه اصطلاحاً بصورت atomic انجام میشه، مشکلی ایجاد نمی کنه. اما مثلاً خواندن عناصر یک آرایه و پردازش اونها، و در thread دیگری تغییر آرایه، تأثیرات بسیار مخربی داره چون اصلاً بصورت atomic انجام نمیشه. منظور از atomic این هست که در سیکل کوتاه و یکباره تغییر اعمال میشه و امکان تداخل با اعمال دیگری وجود نداره. پس در این خصوص جای نگرانی نیست.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .