Just nu i M3-nätverket
Gå till innehåll

Olika trådar och Samma klass?


Jonas Innala

Rekommendera Poster

Jonas Innala

Jag funderar på om det går att kalla på olika funktioner samtidigt i olika trådar från en och samma klass och objekt av den klassen? Alltså jag vet det går att använda Mutex men det känns som om det inte blir lika fint(= snyggt) då.

Och sedan vad är volatile för något jag är det till för i trådprogrammering?

 

Länk till kommentar
Dela på andra webbplatser

Jag funderar på om det går att kalla på olika funktioner samtidigt i olika trådar från en och samma klass och objekt av den klassen?

I en processor finns det inget som sker samtidigt som något annat. Annars så beror det på om funktionerna är skrivna för att klara av det på ett korrekt sätt eller inte. Mutex är väl ett mycket bra sätt att lösa "samtidig" användning av samma variabler. Det eller något liknande är väl precis det som rekommenderas.

 

Volatile brukar användas för variabler som kan ändras medan en funktion exekverar, så att kompilatorn inte ska mellanlagra dess värde i ett register.

 

Länk till kommentar
Dela på andra webbplatser

Du kan självklart ropa på vilken metod du vill från vilken tråd du vill. Så länge trådarna uppfyller At-most-one-property behöver du inte skydda dom med en mutex/semafor. Definitionen är:

AMO:

A critical reference is a reference to a variable which is (can be) changed by another process.

A statement appears to be executed atomically if one of the following is true:

1) It reads at most one critical reference and does not write any critical references,

2) It writes at most one critical reference and does not read any critical references.

Att något exekveras "atomically" innebär att det exekveras utan att bli avbrutet av en annan tråd och därmed inte behöver skyddas.

 

volatile används i C för att tala om att t.ex. tilldelning till en variabel inte får optimeras bort om den verkar onödig. Exempel:

 

void foo(void) {
 volatile int a = 2;
}

 

Från C99 draft 6.7.3:

volatile: No cacheing through this lvalue: each operation in the abstract semantics must be performed (that is, no cacheing assumptions may be made, since the location is notsguaranteed to contain any previous value). In the absence of this qualifier, the contents of the designated location may be assumed to be unchanged except for possible aliasing.

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...