Re: threading

From: Bernd Walter <ticso(at)cicely7.cicely.de>
Date: Wed, 26 May 2010 22:53:39 +0200

On Wed, May 26, 2010 at 10:25:02PM +0200, Marc Santhoff wrote:
> Am Mittwoch, den 26.05.2010, 19:24 +0200 schrieb Marc Santhoff:
> > Moin,
> >
> > ich habe mitbekommen, daß FreeBSD mittlerweile verschiedene
> > Systembibliotheken für Threading benutzt. Richtig beschäftigt habe ich
> > mit dem Thema bezüglich FreeBSD aber nicht. Kann das bitte jemand in
> > Kurzform erklären?

Mittlerweile ist das Antik.
Insgesammt gab es drei - Namen sind eher variabel...
Einmal eine, die aus der alten Erbmasse stammt und reines Userland
Threading macht - die nutzt maximal eine CPU und bei einigen Syscalls
blockiert die andere Threads - im Regelfal bekannt als libc_r.
Die scheint noch irgendwie geflegt zu werden, aber ich finde auf einem
installierten System nur noch alte.
Dann eine, die Mischung aus Kernel und Userland, was eine experimentelle
und gut klingende Idee war, aber wohl aufgegeben wurde - nannte sich
im Regelfall libkse und IIRC später libpthread.
Und später kam eine hinzu, die rein im Kernel arbeitet und inzwischen
als default gilt - dürfte inzwischen libthr sein.
Bezüglich der Namen will ich mich echt nicht festlegen, dass die
alle richtig sind.

> > Mein Problem ist jetzt ein Programm, das bisher ohne Probleme lief, in
> > neuer Version aber beim Startversuch folgenden Fehler meldet:
> >
> > $ lazarus
> > Fatal error 'Spinlock called when not threaded.' at line 78 in
> > file /usr/src7/src/lib/libthr/thread/thr_spinlock.c (errno = 2)
> > Abbruch(core dumped)
>
> Mittlerweile habe ich gelernt, daß dieser Fehler auftritt, wenn ein
> Programm gegen verschiedene Threading Libraries gelinkt wird. Und ich

Nromalerweise sollte kein Programm/Lib gegen eine bestimte gelinkt sein.

> weiß, daß dieses Problem mittels Umlenken aller Bibliotheksnamen auf
> eine einzige in /etc/libmap.conf behoben werden kann.
>
> Nur welche soll ich wählen? Ist es egal?

Du wirst verutlich libthr verwenden wollen.

> $ ldconfig -r|grep thr
> 23:-lpthread.2 => /lib/libpthread.so.2
> 49:-lthr.3 => /lib/libthr.so.3
> 93:-lthr.2 => /usr/lib/libthr.so.2
> ...
> 1375:-lpthread.1 => /usr/local/lib/compat/libpthread.so.1
> 1386:-lthr.1 => /usr/local/lib/compat/libthr.so.1
> ...
> 1457:-lpthread.2 => /usr/local/lib/compat/libpthread.so.2
> 1469:-lthr.2 => /usr/local/lib/compat/libthr.so.2
> ...
> 1533:-lpthread.20 => /usr/local/lib/pth/libpthread.so.20
>
>
> Das dürften so ziemlich alle Kandidaten sein. Muß ich die alle in der
> map-Datei auflisten und auf ein einziges Ziel umbiegen?

Schau einfach mal an was dein Programm läd.
Wenn es keine Libs zur Laufzeit nachläd ist ldd aussagekräftig.

-- 
B.Walter <bernd@bwct.de> http://www.bwct.de
Modbus/TCP Ethernet I/O Baugruppen, ARM basierte FreeBSD Rechner uvm.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 26 May 2010 - 22:53:59 CEST

search this site