آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

MJ  12 سال پیش  12 سال پیش
+1 0

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

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
uncocoder  12 سال پیش
+1 0

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

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

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