Hukommelsesmodel (programmering) - Memory model (programming)

I computing beskriver en hukommelsesmodel interaktioner mellem tråde gennem hukommelse og deres delte brug af dataene .

Historie og betydning

En hukommelsesmodel giver en kompilator mulighed for at udføre mange vigtige optimeringer. Compileroptimeringer som loop-fusion flytter udsagn i programmet, som kan påvirke rækkefølgen af ​​læse- og skriveoperationer af potentielt delte variabler . Ændringer i rækkefølgen af ​​læsning og skrivning kan forårsage raceforhold . Uden en hukommelsesmodel er det ikke tilladt for en compiler at anvende sådanne optimeringer på multitrådede programmer generelt eller kun i specielle tilfælde. Eller for nogle kompilatorer antager ingen udførelse med flere tråde (så bedre optimeret kode kan produceres), hvilket kan føre til optimeringer, der er uforenelige med multi-threading - disse kan ofte føre til subtile bugs, der ikke dukker op i tidlig test .

Moderne programmeringssprog som Java implementerer derfor en hukommelsesmodel. Hukommelsesmodellen specificerer synkroniseringsbarrierer , der etableres via specielle, veldefinerede synkroniseringsoperationer, såsom at erhverve en lås ved at indtaste en synkroniseret blok eller metode. Hukommelsesmodellen bestemmer, at ændringer af værdierne for delte variabler kun skal synliggøres for andre tråde, når en sådan synkroniseringsbarriere nås. Desuden er hele begrebet race race defineret over rækkefølgen af ​​operationer med hensyn til disse hukommelsesbarrierer.

Disse semantik giver optimering af kompilatorer en højere grad af frihed, når der anvendes optimeringer: compileren skal kun sørge for , at værdierne af (potentielt delte) variabler ved synkroniseringsbarrierer er garanteret at være de samme i både den optimerede og uoptimerede kode. Især antages rækkefølgen af ​​udsagn i en kodeblok, der ikke indeholder nogen synkroniseringsbarriere, at være sikre af compileren.

Mest forskning inden for hukommelsesmodeller drejer sig om:

  • Designe en hukommelsesmodel, der giver maksimal frihed til kompilatoroptimeringer, mens de stadig giver tilstrækkelige garantier om race-fri og (måske vigtigere) race-holdige programmer.
  • Bevis for programoptimeringer, der er korrekte i forhold til en sådan hukommelsesmodel.

Den Java Memory Model var det første forsøg på at give en samlet threading hukommelse model for en populær programmeringssprog. Efter at det blev fastslået, at tråde ikke kunne implementeres sikkert som et bibliotek uden at sætte visse begrænsninger for implementeringen, og især at C- og C ++ -standarderne ( C99 og C ++ 03 ) manglede de nødvendige begrænsninger, satte C ++ -trådens underudvalg sig til arbejde på en passende hukommelsesmodel; i 2005 forelagde de C-arbejdsdokument n1131 for at få C-udvalget med om deres indsats. Den endelige revision af den foreslåede hukommelsesmodel, C ++ n2429, blev accepteret i C ++ udkaststandarden på mødet i oktober 2007 i Kona. Hukommelsesmodellen blev derefter inkluderet i de næste C ++ - og C-standarder, C ++ 11 og C11 .

Se også

Referencer