Avatar billede danielhep Nybegynder
25. juli 2004 - 09:36 Der er 14 kommentarer og
1 løsning

tråde i linux til multitasking

hey

tråde i linux.....Skal men bruge tråde til multitasking ?

Jeg kunne godt bruge et link som fortæller om multitasking, med noget kode, så man kunne komme i gang...
Avatar billede arne_v Ekspert
25. juli 2004 - 09:40 #1
Du har valget mellem klassisk Unix fork'ing og Posix threading.
Avatar billede danielhep Nybegynder
25. juli 2004 - 09:41 #2
hvad er bedst hvis du skulle komme med en mening ?
Avatar billede danielhep Nybegynder
25. juli 2004 - 09:42 #3
har du et link til en site som fortæller om det...fordi jeg ved ik helt hvordan man holder styr på de forskellige processer man så har startet...
Avatar billede arne_v Ekspert
25. juli 2004 - 09:43 #4
Det er mit indtryk at thread programmerings paradigmet er det
som man foretrækker idag (både Java og .NET bruger en thread model),
så umiddelbart synes jeg måske at Posix threading ville være det mest
interessante.
Avatar billede arne_v Ekspert
25. juli 2004 - 09:44 #5
Avatar billede arne_v Ekspert
25. juli 2004 - 09:45 #6
Avatar billede danielhep Nybegynder
25. juli 2004 - 09:51 #7
har du noget om multitasking ?
Avatar billede arne_v Ekspert
25. juli 2004 - 09:53 #8
Du mener noget om fork'ing ?
Avatar billede arne_v Ekspert
25. juli 2004 - 09:59 #9
Det er svært at finde noget godt.

det bedste jeg kunne google var:
  http://www2.cs.uregina.ca/~hamilton/courses/330/notes/unix/fork/fork.html
Avatar billede danielhep Nybegynder
25. juli 2004 - 10:19 #10
ok..giv dit svar
Avatar billede arne_v Ekspert
25. juli 2004 - 10:36 #11
ok

Jeg skal ikke lave nogen eksempler ?
Avatar billede danielhep Nybegynder
25. juli 2004 - 12:12 #12
det må du da gerne, hvis du vil... :)
Avatar billede arne_v Ekspert
25. juli 2004 - 13:31 #13
Posix threads eksempel:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *f(void *arg)
{
    int start,slut,i;
    int *retptr;
    start = *((int *)arg);
    slut = start + 9;
    for(i=start;i<=slut;i++)
    {
        printf("%d\n",i);
        sleep(1);
    }
    retptr = (int *)malloc(sizeof(int));
    *retptr = slut;
    return retptr;
}

#define N 5

int main()
{
    int i,arg[N];
    int *retval[N];
    pthread_t t[N];
    for(i=0;i<N;i++)
    {
        arg[i] = 10 * i;
        pthread_create(&t[i], NULL, f, &arg[i]);
    }
    for(i=0;i<N;i++)
    {
        pthread_join(t[i],(void **)&retval[i]);
        if(arg[i]+9 == *retval[i])
        {
            printf("OK\n");
        }
        else
        {
            printf("Fejl\n");
        }
    }
    return 0;
}
Avatar billede arne_v Ekspert
25. juli 2004 - 13:42 #14
Fork eksempel:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void f(int start)
{
    int slut,i;
    slut = start + 9;
    for(i=start;i<=slut;i++)
    {
        printf("%d\n",i);
        sleep(1);
    }
}

#define N 5

int main()
{
    int stat[N],i;
    pid_t pid[N];
    for(i=0;i<N;i++)
    {
        pid[i] = fork();
        if(pid[i]==0)
        {
            f(10*i);
            return 0;
        }
    }
    for(i=0;i<N;i++)
    {
        waitpid(pid[i],&stat[i],0);
        if(stat[i] == 0)
        {
            printf("OK\n");
        }
        else
        {
            printf("Fejl\n");
        }
    }
    return 0;
}
Avatar billede danielhep Nybegynder
25. juli 2004 - 15:01 #15
takker :)
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