05. november 2004 - 05:43Der er
19 kommentarer og 1 løsning
mutex beskyttelse af funktioner
Hej,
Jeg har to spørgsmål som jeg ønsker besvaret: 1: Jeg har to tråde som tilgår den sammen resource hvordan laver jeg en mutex som beskytter den? Problemet er vel at begge tråde skal kende de sammen mutex?(JEG BRUGER LINUX)
Programmet virker på denne måde: Jeg har to prossor som kører siddeløbende. Princippet bag trådene er at den ene kører hvert sekunder, og når den er færdig frigiver den CPUen. Her forestiller jeg mig at den anden processe igennem en mutex skal have besked om at den kan køres. Den anden process bliver kørt ca. hvert 10 minuter.
2. Når man kompiler på linux er der så ikke en måde hvor man kan tilføje en options så man får mere at vide om grunden hvis programmet cracher? Problemet er at jeg har efterhånden lavet er stort og kompekst systemet. Og det kører faktisk rigtig fint, men efter 36 timer får jeg pludselig en "segment fail" - og jeg har jo inden mulighed for at finde fejl på den baggrund.
Pointene vil blive delt lige immellem spørgsmålene.
Nu opretter jeg denne mutex i main. Der hvor begge tråde bliver startet.
Men trådene kan ikke se mutexen. Hvad skal jeg gøre for at begge tråde(som er to forskellige klasser, der ligger i to forskellige filer) kan se mutexen?
Jeg har laget mutexen i en klasser der heddder Thread, hvor begge tråde nedarver fra. I denne klasser er den gjort protected, og arven er public. Så dermed kan mutexen ses i de to tråd klasser.
Det kompiler også fint nu - men programmet "starter" aldrig. Det er som om den unlock-metode ikke virker?
Skal den ikke oprettet på denne måde under medlemsvariablerne? pthread_mutex_init(&g_mutex,NULL);
Jeg får nemlig følgende fejl når der linkes: : : undefined reference to `Thread::mutex' Thread1.o(.text+0xc90): In function `Statistics::tmain()': : undefined reference to `Thread::mutex' collect2: ld returned 1 exit status make: *** [Test] Error 1
Dette giver følgende fejl: Thread.h:21: `static' may not be used when defining (as opposed to declaring) a static data member Thread.h:21: `pthread_mutex_t Thread::mutex' is not a static member of `class Thread' make: *** [Thread.o] Error 1
Thread2.o(.bss+0x0): multiple definition of `Thread::mutex' Thread.o(.bss+0x0): first defined here Driver.o(.bss+0x4): multiple definition of `Thread::mutex' Thread.o(.bss+0x0): first defined here Thread1.o(.bss+0x0): multiple definition of `Thread::mutex' Thread.o(.bss+0x0): first defined here
Hvad betyder det? Jeg har endda udkommenteret alt med mutexen i de Thread1 og 2
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.