Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet160/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   156   157   158   159   160   161   162   163   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

ВниМание
Хотя.конструктор.типа.можно.определить.в.значимом.типе,.этого.никогда.не.следует.
делать,.так.как.иногда.CLR.не.вызывает.статический.конструктор.значимого.типа .
Например:
internal struct SomeValType {
static SomeValTypeQ {
Console.WriteLine("This never gets displayed");
}
public Int32 m_x;
}
public sealed class Program {
public static void Main() {
SomeValType[] a = new SomeValType[10];
a[0].m_x = 123;
Console.WriteLine(a[0].m_x); // Выводится 123
}
}
У вызова конструктора типа есть некоторые особенности. При компиляции 
метода JIT-компилятор обнаруживает типы, на которые есть ссылки из кода. 
Если в каком-либо из типов определен конструктор, JIT-компилятор проверяет, 
был ли исполнен конструктор типа в данном домене приложений. Если нет, JIT-


224
Глава.8 .Методы
компилятор создает в IL-коде вызов конструктора типа. Если же код уже испол-
нялся, JIT-компилятор вызова конструктора типа не создает, так как «знает», что 
тип уже инициализирован.
Затем, после JIT-компиляции метода, начинается выполнение потока, и в конеч-
ном итоге очередь доходит до кода вызова конструктора типа. В реальности может 
оказаться, что несколько потоков одновременно начнут выполнять метод. CLR 
старается гарантировать, чтобы конструктор типа выполнялся только раз в каждом 
домене приложений. Для этого при вызове конструктора типа вызывающий поток 
в рамках синхронизации потоков получает исключающую блокировку. Это означа-
ет, что если несколько потоков одновременно попытаются вызывать конструктор 
типа, только один получит такую возможность, а остальные блокируются. Первый 
поток выполнит код статического конструктора. После выхода из конструктора 
первого потока «проснутся» простаивающие потоки и проверят, был ли выполнен 
конструктор. Они не станут снова выполнять код, а просто вернут управление из 
метода конструктора. Кроме того, при последующем вызове какого-либо из этих 
методов CLR будет «в курсе», что конструктор типа уже выполнялся, и не будет 
вызывать его снова.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   156   157   158   159   160   161   162   163   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish