ورود

نسخه کامل مشاهده نسخه کامل : کامپایلر متغیر استاتیک ما را به اشتراک می گذارد!!



Life24
11-08-2013, 19:37
با سلام به عزیزان
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در مثال بالا اعلام کرده ایم که متغیر ما [ThreadStatic] هست . یعنی مقدار را به اشتراک نگذار بین ترد ها. و هر کس برای خودش یک مقدار دارا است.

در بحث متغیر ها ی استاتیک میدانیم که وقتی اعلان استاتیک می شود مقدارش بین همه ثابت است. پس به اشتراک گذاشته میشود.
حال در مثال بالا ما باید برای متغیر filed حتما حتما static را بگذاریم. و گرنه خطا میدهد.
یعنی از یک طرف با [ThreadStatic] میگیم به اشتراک نزار بین ترد ها و از ان طرف با static کردن متغیر سعی در چه کاری داریم؟

ایا لینکی سایتی هست که بفهمیم این ترد ها نحوه حافظه گرفتن و متغیرها برایشان چگونه است؟ با تشکر

Msba
11-08-2013, 20:49
هم آمورش می دهید هم سوال می کنید.:n01:

static کردن در راستای استفاده ی سراسری نیست که بخواهیم بگوییم کارش این است. زمانی که متغیر را static می کنید یک حافظه ی ثابت بدان اختصاص می دهید. یعنی در همه جای برنامه این آدرس ثابت است برای همین هم هست که قابل دسترس هست. پس به دو دلیل:
1-به ازای Thread های شما نقاط ثابتی در نظر گرفته شود.
2-سعی در آن داریم که این عنصر همیشه در حافظه ی برنامه باشد. چرا؟ چون Thread ها در حافظه مقیم خواهند شد پس زمانی که با عنصری که مختص خودشان هست کار می کنند، باید مشخص باشد، زمان آغاز Thread مشخص نیست ولی زمانی که آغاز می کند نقطه ی مشخصی برای عناصر مورد نیاز وجود داشته باشد، حال می خواهد این عنصر یک اشاره گر null باشد ولی حداقل خود اشاره گر وجود داشته باشد و Thread بتواند بدان دسترسی ثابت داشته باشد.
----------------------------------
اگر سایتی یافتید ما را هم بهره مند سازید.

موفق باشید.

Life24
31-08-2013, 09:29
سلام
پس چه تفاوتی بین متغیر های سراسری و استاتیک وجود دارد؟
بلاخره هر دو را میتوان در تمام حوزه کلاس استفاده کرد و تغیرات را برایشان اعمال کرد و در کل برنامه تغیر صورت بگیرد.
استاتیک ها نمونه سازی نمیشوند.