کلمه کلیدی Volatile در سی شارپ

کلمه کلیدی Volatile در سی شارپ

 

Volatile

کلمه کلیدی Volatile در سی شارپ نشان می دهد که یک فیلد ممکن است توسط چندین نخ (thread) که همزمان در حال اجرا هستند اصلاح شود. کامپایلر، سیستم runtime و حتی سخت‌افزار ممکن است به دلایل بهینه سازی، خواندن و نوشتن را در مکان‌های حافظه تغییر دهند. فیلدهایی که Volatile اعلام می شوند از انواع بهینه سازی مستثنی هستند تا اطمینان حاصل کنند که مقدار آن همیشه به روز است، حتی در صورت وجود دسترسی همزمان.

نکته ای باید به آن توجه کنید این است که در یک سیستم چند پردازنده ای، عملیات خواندن Volatile تضمینی برای به دست آوردن آخرین مقدار نوشته شده در آن مکان حافظه توسط هیچ پردازنده ای نیست. به طور مشابه، عملیات نوشتن Volatile نیز تضمین نمی کند که مقدار نوشته شده بلافاصله برای سایر پردازنده ها قابل مشاهده باشد.

کلمه کلیدی Volatile را می توان برای فیلدهایی از انواع زیر اعمال کرد:

  1. Reference types ها
  2. انواع اشاره گر (در یک context ناامن). توجه داشته باشید که اگرچه خود اشاره گر می تواند Volatile باشد، اما شیئی که به آن اشاره می کند نمی تواند. به عبارت دیگر، شما نمی توانید یک "اشاره گر به Volatile " را اعلام کنید.
  3. انواع ساده مانند sbyte، byte، short، ushort، int، uint، char، float و bool.
  4. یک نوع enum با یکی از انواع پایه زیر: byte، sbyte، short، ushort، int یا uint.
  5. پارامترهای Generic type که به عنوان reference types شناخته می شوند.
  6. IntPtr و UIntPtr.

انواع دیگر، از جمله double و long، نمی توانند Volatile علامت گذاری شوند، زیرا خواندن و نوشتن در فیلدهای آن نوع نمی تواند تضمین شود که اتمی هستند. برای محافظت از دسترسی چند رشته ای به آن نوع فیلدها، از اعضای کلاس Interlocked استفاده کنید یا با استفاده از دستور lock از دسترسی محافظت کنید.

کلمه کلیدی Volatile فقط می تواند برای فیلدهای یک کلاس یا ساختار اعمال شود. متغیرهای محلی را نمی توان فرار اعلام کرد.

در اینجا مثالی از نحوه استفاده از Volatile آورده شده است:

 

public class Counter
{
    private volatile int _count;

    public int Count
    {
        get { return _count; }
        set { _count = value; }
    }
}

 

مرتضی جنگجو

برنامه نویس fullstack با بیش از 14 سال سابقه کار و همکاری در توسعه و پیاده سازی نرم افزارهای تحت وب با تکنولوژی Net. در شرکتهای بزرگ ایرانی، هلندی، فنلاندی و ترکیه

شبکه های اجتماعی نویسنده

دیدگاه کاربران