کامپایلر متغیر استاتیک ما را به اشتراک می گذارد!!
با سلام به عزیزان
کد:
using System;
using System.Threading;
namespace Chapter1
{
public class Program
{
[ThreadStatic]
public static int field;
public static void Main()
{
new Thread(() =>
{
for(int x = 0; x < 10; x++)
{
field++;
Console.WriteLine("Thread A: {0}", field);
}
}).Start();
new Thread(() =>
{
for(int x = 0; x < 10; x++)
{
field++;
Console.WriteLine("Thread B: {0}", field);
}
}).Start();
Console.ReadKey();
}
}
}
در مثال بالا اعلام کرده ایم که متغیر ما [ThreadStatic] هست . یعنی مقدار را به اشتراک نگذار بین ترد ها. و هر کس برای خودش یک مقدار دارا است.
در بحث متغیر ها ی استاتیک میدانیم که وقتی اعلان استاتیک می شود مقدارش بین همه ثابت است. پس به اشتراک گذاشته میشود.
حال در مثال بالا ما باید برای متغیر filed حتما حتما static را بگذاریم. و گرنه خطا میدهد.
یعنی از یک طرف با [ThreadStatic] میگیم به اشتراک نزار بین ترد ها و از ان طرف با static کردن متغیر سعی در چه کاری داریم؟
ایا لینکی سایتی هست که بفهمیم این ترد ها نحوه حافظه گرفتن و متغیرها برایشان چگونه است؟ با تشکر