PDA

View Full Version : volatile modifier



mr_esmaily
پنج شنبه 30 تیر 1384, 16:33 عصر
سلام
از modifier فوق به چه منظوری استفاده میشه؟

sh_roohani
شنبه 01 مرداد 1384, 10:12 صبح
سلام،
اکثر کامپایلرها موقع کامپایل کد شما رو بهینه سازی می کنن و اگه تشخیص بدن متغیری در برنامه ممکنه تغییر نکنه، کد رو طوری بهینه سازی می کنن که یه پیش فرضهایی رو در مورد محتوای اون متغیر در نظر بگیره. حالا اگه شما بخواین به کامپایلر تاکید کنین که نمی خواین در این مورد بهینه سازی انجام بده و می خواین متغیرتون یه متغیر باقی بمونه(!) از volatile استفاده می کنین. این در واقع به کامپایلر می گه که این متغیر دایما در حال تغییره و در نتیجه هیچگونه پیش فرضی رو در مورد محتوای اون در نظر نگیر.
به عنوان یه مثال، من توی یکی از برنامه هام یه thread داشتم و واسه علامت دادن به اون از یه متغیر منطقی استفاده می کردم. ولی می دیدم که اون متغیر درست کار نمی کنه. از اونجایی که با فرکانس بالایی محتوای اون تغییر می کرد، اونو با volatile اصلاح کردم و مشکل حل شد.

seyedof
شنبه 01 مرداد 1384, 20:48 عصر
سلام
کاری که در thread کرده اید احتمالا اشتباه است. خواندن و نوشتن یک متغیر از جمله بولین در دو thread جداگانه خطرناک است. باید از Critical Section یا Semaphore در این موارد استفاده کنید.
یا اگر قصد شما علامت دادن توسط متغیر boolean است بجاش از Event استفاده کنید که Thread Safe هستش.
ممنون علی

sh_roohani
یک شنبه 02 مرداد 1384, 09:23 صبح
درسته. البته بعدا متوجه این مسئله شدم. اون موقع نمی دونستم. اما منظور فقط این بود که تاثیر volatile رو بگم.
به هر صورت ممنون از راهنماییتون.