Trochu OT: vlakna na Linuxu fungujou a na HPUX ne

Libor Chocholaty chocholaty na gncz.cz
Čtvrtek Červen 29 15:59:53 CEST 2000


Cau i tobe,
atributy samo inicializuju.

ad 1)    nefachci
ad 2)    nepomaha

Zjistil jsem, ze v HPUX 10.20 jsou napsany thready podle POSIX 1003.4a, kdezto v
Linuxu posle POSIX 1003.1c. Myslim, ze 10.20 nema kernel level thready, nebo to
na me dela takovy dojem. A taky se pro vlaknovani pouziva knihovna DCE (prave
podle 1003.4a). Od verze 10.30 by to melo byt OK, ale ... znate to. Pouzil jsem
GNU knihovnu Pth a s ni to nejede, zkusim jeste linkovat proti tomu libdce a
uvidime.
Zatim dik za napady.

Libor


Michal Jirkovsky wrote:

> Cau,
>
> nevim jestli inicializujes th_attr (funkci pthread_attr_init()), ale jinak ten
>
> kod vypada v poradku. Muzes jeste zkusit nasledujici:
>
> 1) vytvorit normalni joinable vlakno a teprve potom ho funkci pthread_detach()
>
> prevest do stavu detach
>
> 2) na zacatek programu pouzivajici vlakna je dobre vlozit toto:
>
>         #define _POSIX_C_SOURCE 199500L
>         #include <limits.h>
>         #ifdef _POSIX_THREADS
>         #include <pthread.h>
>         #else
>         #error "POSIX threads are not available"
>         #endif
>
> Snad ti neco z toho pomuze.
>
>     Michal Jirkovsky
>
> Libor Chocholaty wrote:
>
> > Ahoj,
> > mate nekdo zkusenosti s poustenim vlaken na HPUX 10.20 ve stavu
> > DETACHED?
> > Na Linuxu to jede jako po masle, ale na HPUX ne. Nic nerekne, vsechno
> > probehne bez chybovych navratovych hodnot, ale vlakno nikde. Nemate
> > nekdo napad? pouzivam pthready a vytvareni vlakna delam:
> >
> > err_code = pthread_attr_setdetachstate( &th_attr,
> > PTHREAD_CREATE_DETACHED);
> > if(err_code) {
> >     MONITOR1(T_INFO, "\tSet pthread attr failed, error code = %d\n",
> > err_code);
> >     return err_code;
> > }
> > else {
> >     MONITOR(T_INFO, "\tAttributes set\n");
> > }
> > err_code = pthread_create( &my_thr, &th_attr, accepting_thread, NULL);
> > if(err_code) {
> >     MONITOR1(T_INFO, "\tThread creation failed, error code = %d\n",
> > err_code);
> > }
> > else {
> >     MONITOR(T_INFO, "\tThread created\n");
> > }
> >
> > vlaknova funkce:
> > void *accepting_thread(void *) {
> >     struct sockaddr_in klientaddr;
> >
> >     MONITOR(T_ENTRY, ">> *accepting_thread(void *)\n");
> >     MONITOR(T_INFO, "Waiting for incoming connections...\n");
> >     len = sizeof(klientaddr);
> > .



Další informace o konferenci Linux