PDA

View Full Version : مبتدی: Volatile در زبان C به چه معناست ؟؟؟؟؟



aminomidi
چهارشنبه 20 اردیبهشت 1391, 08:03 صبح
سلام دوستان خسته نباشید . یه سوال داشتیم و اون هم این که کلمه ی کلیدی volatile در زبان C به معناست ؟؟؟
یا به طور دقیق تر در مثال زیر به چه مفهومیه ؟؟؟؟
Volatile int x
ممنون میشم اگه جوب سوالمو بدید .

ASGGSA
یک شنبه 07 خرداد 1391, 00:08 صبح
کاربرد کلمه کلیدی volatile
متغیرهایی از نوع volatile متغیرهایی هستند که ممکن است مقدار آنها توسط یک پردازش خارجی تغییر یابد. این پردازش می‌تواند وقوع یک وقفه، یا تغییر از طریق یک پردازش موازی باشد.
کامپایلرهای زبان برنامه‌نویسی ++C اغلب از روش‌های بهینه‌سازی برای دست‌یابی به متغیرهای تعریف شده در طول برنامه استفاده می‌کنند. به عنوان مثال، آخرین تغییر هر متغیر در طول پردازش را به عنوان مقدار آن متغیر در نظر گرفته، و اگر دستوری مقدار متغیر را تغییر ندهد، همان مقدار نهایی را در پردازش مدنظر قرار می‌دهد. اما متغیرهایی از نوع volatile متغیرهایی هستند که لزوما از طریق پردازش جاری تغییر نمی‌کنند. بنابراین ممکن است مقدار آنها توسط پردازش دیگر یا یک وقفه عوض شود، بدون آنکه کامپایلر متوجه باشد. برای جلوگیری از چنین خطایی، کلمه کلیدی volatile در ابتدای تعریف متغیر استفاده می‌شود، تا کامپایلر عملیات بهینه‌سازی روی آن انجام نداده، و در هر بار فراخوانی اسم متغیر در طول برنامه، مقدار آن را از محل حافظه بخواند.

volatile int Item;
int WaitForChange()
{
Item = 0;
while(!Item); // حلقه با بدنه تهی
return Item;
}

این تابع تا زمانی که Item صفر باشد درون حلقه باقی خواهد ماند. متغیر Item به صورت volatile معرفی شده است تا با هر بررسی شرط، مقدار Item از حافظه واکشی شود. این مقدار ممکن است توسط یک پردازش موازی دیگر، یا یک وقفه تغییر کند.

منبع (http://www.algorithmha.ir/post-%D9%86%DA%A9%D8%A7%D8%AA-%D9%85%D9%87%D9%85-%D8%AF%D8%B1-%D8%B3%DB%8C-%D9%BE%D9%84%D8%A7%D8%B3-%D9%BE%D9%84%D8%A7%D8%B3.aspx)