سوال: Thread safe

ساخت وبلاگ

یعنی میتونید در multi-threading (چند نخی) بدون نگرانی از مشکلاتی که در این حالت در برنامه نویسی به وجود میاد استفاده کنید.
بذارید یه مثال ساده بزنم. فرض کنید یک کلاس دارید که داخلش یک متغیر private به اسم balance وجود داره و با دو متد setBalance() و getBalance() میتونید مقدار اون رو تغییر بدید و یا بخونید. اگر این متغیر موجودی حساب شما رو نشون بده اگر برنامه single thread باشه و یعنی فقط یک برنامه داره اجرا میشه و دو قسمت کد همزمان اجرا نمیشن، هیچ مشکلی وجود نداره و مثلا بخواید از موجودی حسابتون 1000 تومن کم کنید:

setBalance(getBalance()-1000);

اما اگر multi-thread باشه یعنی دو کد بتونن به این متدها دسترسی داشته باشن و مقدار balance رو تغییر بدن، اون موقع قضیه متفاوته. ممکنه همزمان شما بخواید 1000 تومن پول وردارید و بانکدار هم میخواد تمام پول شما رو برداشت کنه و پول نقد بده. همچنین هیچ وقت نباید پول حساب یک عدد کمتر از صفر بشه.
اما اگر زمانی که شما مقدار موجودی رو میخونید میبینید 50 هزارتومان هست، میگید میشه 1000 تومان پول برداشت کنم. بانکدار هم میبینه 50 هزارتومان موجودی هست و 50 هزارتومان برداشت میکنه. از اونجایی که این کار همزمان انجام میشه اگر بانکدار زودتر 50 هزارتومان رو برداشت کنه و بعد شما 1000 تومان رو برداشت کنید یا عکس این، در هر صورت موجودی منفی میشه. البته ممکنه خیلی اتفاقات دیگه هم بیفته.
در کل در چنین مواقعی از synchronization استفاده میکنند تا اگر دو کد همزمان میخواستن به یک متغیر دسترسی پیدا کنن، یکی قفل بذاره و وارد ناحیه بحرانی (critical section) بشه و دیگری وارد نمیشه و برای همین اتفاقی رخ نمیده. به این میگن thread safe

شاید بگید این خیلی نادره ولی این یه مثال بود. تو برنامه که نمیخواد از کاربر ورودی بگیره، خیلی سریع کارها پیش میره و امکان چنین اتفاقاتی وجود داره. مثال بزنم، ArrayList که خیلی ازش استفاده میشه Thread Safe نیست و باید اگر در multi-threading استفاده میکنیم حواسمون باشه ولی Vector معادل همون اما Thread Safe هست و نیازی نیست نگران باشیم. اما باید توجه کنید سرعت کار با Vector کمتر از ArrayList هست و جایی که نیاز نیست ازش استفاده نکنیم

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : سوال, نویسنده : محمد رضا جوادیان programers بازدید : 159 تاريخ : سه شنبه 24 مرداد 1396 ساعت: 4:52

خبرنامه