Avatar billede tax Nybegynder
07. januar 2002 - 09:22 Der er 17 kommentarer og
1 løsning

Semaforer?

Jeg arbejder på et projekt der involverer flere tråde med noget fælles data. Jeg er kommet i tvivl om brugen af semaforer.

Mit normale udgangspunkt har været at dbruge semaforer altid. Selv hvis to tråde skulle dele en enkelt integer, men nu læser jeg at semaforerne kun er nødvendige når informationsmængden er større, og man anvender semaforen for at holde andre tråde udenfor medens data bliver behandlet færdig.

Hvad gør i?
Avatar billede chries Nybegynder
07. januar 2002 - 09:33 #1
En int kan opdateres med en instruktion og behøver derfor ikke at beskyttes. Men hvis int\'en ikke må ændre værdi men du anvender den ( f.eks skal lægge flere tal til før du vil frigive den) skal den beskyttes
Avatar billede tax Nybegynder
07. januar 2002 - 09:34 #2
Hvad med lidt større datatyper long osv?
Avatar billede tax Nybegynder
07. januar 2002 - 09:34 #3
Funktionspointere etc
Avatar billede chries Nybegynder
07. januar 2002 - 09:34 #4
hvis dit system er preemptivt
Avatar billede chries Nybegynder
07. januar 2002 - 09:36 #5
hvis din resigter bredde er 32 bits, høver funktion pointer og long heller ikke beskyttet
Avatar billede chries Nybegynder
07. januar 2002 - 09:36 #6
..behøver..
Avatar billede tax Nybegynder
07. januar 2002 - 09:36 #7
Thanx!
Avatar billede chries Nybegynder
07. januar 2002 - 09:38 #8
..register..
jeg lærer aldrig at læse mine post igennem før jeg får trykket udfør .-)
Avatar billede tax Nybegynder
07. januar 2002 - 09:39 #9
Det er budskabet der er vigtigt for mig .. Tak for hjælpen
Avatar billede soepro Nybegynder
07. januar 2002 - 16:02 #10
chries >> Det var nyt ! Hvad hvis en anden tråd har læst int\'en for at incremente den, men du opdaterer i mellemtiden ???

Alle variabler, der skal bruges af flere tråde, skal beskyttes af en monitor - man kan dog tillade læsning af variablen mens den er ved at blive opdateret vha. MultiReadExclusiveWriteSynchronizer (C++ Builder specifik ?!?) hvis man har behovet. Eneste alternativ hertil er at lade een enkelt tråd både læse og skrive variablen, hvorved monitoren er indbygget den vej rundt - men det kræver kommunikation mellem de enkelte tråde. (C++ Builder har gjort dette meget nemt vha. Synchronize() metoden.)
Avatar billede chries Nybegynder
07. januar 2002 - 16:05 #11
Tja, læs hvad jeg skriver:

Men hvis int\'en ikke må ændre værdi mens du anvender den ( f.eks skal lægge flere tal til før du vil frigive den) skal den beskyttes

Avatar billede chries Nybegynder
07. januar 2002 - 16:08 #12
Og hvis systemet ikke er preemptivt behøver større data typer heller ikke at beskyttes.
Avatar billede soepro Nybegynder
07. januar 2002 - 16:08 #13
;)
Avatar billede soepro Nybegynder
07. januar 2002 - 16:10 #14
Hvordan vil du køre trådet på et ikke-preemptivt operativ system ? Og i givet fald med hvilket formål ?
Avatar billede chries Nybegynder
07. januar 2002 - 16:19 #15
nu er det lidt siden jeg har haft multiprogrammering, men mener at huske preemptivt = tråd kan afbrydes til enhver tid.

non-preemptiv får tråden lov til at køre til den afgiver processoren igen.

følgende er hugget fra http://www.compapp.dcu.ie/~humphrys/OS/theory/processes.html


Non-preemptive scheduler:

When process gets CPU, it keeps it until goes into Wait or terminates.

Can work on hardware which has no timer mechanism.

Can work for a multi-process system, but only for a single-user multi-process system.

This is what Windows 3 (just before Windows 95) did. The user controlled the switching. When you switched focus of the window, background process was frozen.





Preemptive scheduler:

Even though process is running happily, it simply gets interrupted by the CPU after some time.

UNIX, Windows 95 onwards.

Needs timer hardware.

Need to be careful that program can be interrupted and then resumed in consistent state. (Are files open? Is I/O in progress?)
Avatar billede soepro Nybegynder
08. januar 2002 - 08:41 #16
Har også haft multiprogrammering, så forskellen er jeg klar over - det er også derfor jeg har svært ved at se en trådet løsning på et eller andet problem, løst vha. frivillig tidsdeling.

Postemptive systemer kører normalt FORSKELLIGE opgaver i frivillig tidsdeling (ligesom Windows 3.x gjorde) men ikke trådet indenfor samme process. (Altså f.eks. regneark, tekstbehandling og operativ system samtidigt, men hver for sig i een tråd.) Postemptive systemer er også dem der \"hænger\" når en process ikke \"slipper\" CPU\'en.
Avatar billede tax Nybegynder
08. januar 2002 - 08:44 #17
så vidt jeg ved hedder det vist \"preemptivt\" eller \"non-preemptivt\". Har aldrig hørt om \"post\"?
Avatar billede chries Nybegynder
09. januar 2002 - 09:29 #18
Nu ville jeg egenligt have læst hvad der stod i mine studie bøger ( siden bøger altid koster en krig, gælder det om at slide dem mest mulig for at få valuta for pengene :-) ) Meeen det endte om med tiden gik med at øve sig i at gætte indfalds vinkler på et pool bord.

non-preemptive er da meget anvendeligt indenfor embedded (mindre systemer). Man kan anvende det i enhver microprocessor uden timer eller hvor task ikke er tids kritiske.

f.eks:
http://www.keil.com/c51/tr51.htm

mini non-preemptive os på 900 bytes. Perfekt til at håndtere keyboard input, et LCD display, monitorering af hardware og sending af data på can bus \"samtidligt\".

okey, 8051\'eren er måske en død pølse, men den har da også haft sin storheds tid :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester