Interlock (programmering)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 2. juli 2015; checks kræver 5 redigeringer .

I datalogi er en lås en synkroniseringsmekanisme  , der giver mulighed for eksklusiv adgang til en delt ressource mellem flere tråde . Låse er en måde at håndhæve politik for samtidighedskontrol .

Typer af låse

Grundlæggende bruges en blød lås , som antager, at hver tråd forsøger at erhverve en lås, før den får adgang til den tilsvarende delte ressource. Nogle systemer har en obligatorisk låsemekanisme , som , når den bruges, vil et forsøg på at få uautoriseret adgang til en låst ressource blive afbrudt ved at kaste en undtagelse på den tråd, der forsøgte at få adgang.

En semafor  er den enkleste type lås. Med hensyn til dataadgang skelnes der ikke mellem adgangstilstande: delt (skrivebeskyttet) eller eksklusiv (læse-skrive). I delt tilstand kan flere tråde anmode om en lås for at få adgang til data i skrivebeskyttet tilstand. Den eksklusive adgangstilstand bruges også i opdaterings- og sletningsalgoritmerne.

Typerne af låse er kendetegnet ved strategien for at blokere fortsættelsen af ​​udførelsen af ​​tråden. I de fleste implementeringer forhindrer en anmodning om en lås tråden i at fortsætte med at udføre, indtil den låste ressource er tilgængelig.

En spinlock  er en lås, der venter i en løkke, indtil der gives adgang. En sådan lås er meget effektiv, hvis en tråd venter på en lås i et lille stykke tid, hvorved man undgår overdreven omlægning af tråde. Omkostningerne ved at vente på adgang vil være betydelige, hvis en af ​​trådene holder låsen i lang tid.

For effektivt at implementere låsemekanismen kræves støtte på hardwareniveau. Hardwaresupport kan implementeres som en eller flere atomoperationer , såsom " test-og-sæt ", " hent-og-tilføj " eller " sammenlign-og-byt ". Sådanne instruktioner gør det muligt uden afbrydelse at kontrollere, at låsen er fri, og i givet fald at erhverve låsen.

På uniprocessor-systemer er det muligt at udføre instruktioner uden hardwareafbrydelser ved at bruge specielle instruktioner eller instruktionspræfikser, der midlertidigt deaktiverer interrupts, men denne tilgang virker ikke på multiprocessorsystemer med delt hukommelse. Fuld understøttelse af låse i et multiprocessormiljø kan kræve ret kompleks hardware- og softwaresupport med betydelige timingproblemer .

Databaseniveaulåse

Noter