Just nu i M3-nätverket
Jump to content

Olika trådar och Samma klass?


Jonas Innala

Recommended Posts

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?

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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.

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...