Mail Archives: djgpp/1996/07/23/14:58:10
> Topic: Multithreads, specially the LWP package:
>
> First the package is good, but like all the new things (fruits ;) is green.
> I found 2 mayor problems in the package:
>
> 1) The Test program asumes 2 things:
> a) printf is reentrant.
Yes I'm aware of this, and am trying out a class solution at first. I think
a good solution would need to recode some of the libc. Two possibilities there:
* mess around with flags, which is cheap and cheerful, but not necessarily
efficient
* try to make libc moderately re-entrant: a transfer buffer per process, etc.
The class system should provide a generic work-around for all non reentrant
functions (and there will be quite a few in people's legacy code). Then we can
have a look at libc. Clearly, if anything got to the heady heights of being
approved by the inner cabal (DJ, Charles, and any unnamed ones) it might reach
standard libc.
> b) DOS is reentrant.
For DOS there is no problem, as far as I know:
The interrupt makes a signal. This is done by changing the SS and DS segment
size to cause a fault when they are used by the protected mode program. BUT:
that is under PROTECTED MODE, and since you switch to real mode for DOS, there
are no problems for DOS.
> 2) The kill doesn't kill anybody, or worst kills the program.
I think you are wrong there. The kill is bugged, but that's something different.
I've tracked down the bug so it works. However I think it illustrates an
intrisic problem with malloc and DS.
> 1) Please somebody correct me if I'm wrong but:
> If the 1KHz interrupt (used for task switching) arrives when DOS is printing
> (or writing to disk or wherever) the DPMI server reflects the IRQ to the
> protected mode, then the program makes a task switch and if the new task
> calls to DOS again the result is unpredictable.
Yes, but see above.
> This seems to be NOT enough, I don't see the code of printf but seems that
> printf isn't reentrant. When I run the test some times work and some times
> doesn't work.
Yes. That's the cause. There's a really subtle bug that makes it work on the
first releases :-).
Oh, btw, if you wonder why I'm working on this too, it's because I really liked
Josh's package, so decided to work on it. We are cooperating on it, to pool
resources, knowledge, and so on. I hope we can produce something really useful,
as we both need it!
See ya!
Sengan
- Raw text -