Weird std.stdio threading bug?
Steven Schveighoffer
schveiguy at yahoo.com
Tue Apr 28 07:54:14 PDT 2009
On Tue, 28 Apr 2009 10:16:21 -0400, dsimcha <dsimcha at yahoo.com> wrote:
> == Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
>> On Tue, 28 Apr 2009 09:51:54 -0400, dsimcha <dsimcha at yahoo.com> wrote:
>> > == Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
>> >> Have you tried synchronizing on an actual object? I remember some
>> time
>> >> back how Walter proposed removing synchronized as you have written
>> it.
>> >> Not sure what happened for that.
>> >> The way you have written the code, assuming that the synchronized
>> >> statement is doing what you think it's doing, the call to writeln
>> should
>> >> be completely syncrhonous, so multithreading issues or not, it should
>> >> work.
>> >> -Steve
>> >
>> > Good idea, still doesn't work. All of the loops just die after a few
>> > iterations,
>> > leaving me at 0% CPU usage. This happens on multiple win32 boxes.
>> > Could someone
>> > please test this on some other OS?
>> Latest compiler? D1 D2?
>> -Steve
>
> 2.029. Thanks for your help. I'm just trying to make sure this is a
> legit bug
> and maybe understand its underpinnings a little better before I file a
> bug report,
> because if it is a legit bug, it's a pretty serious one.
Yep, I confirm (on WinXP). I get 2 or three outputs and then hang.
I also tried several different things:
Things that worked (continually output "Doing stuff."):
1. removing the synchronized(lock) statement
2. Changing the number of threads to 0
3. Changing the print line to use printf("Doing stuff.\n");
Things that still failed:
4. Changing the number of threads to 1 (which would mean 2 threads, the
main thread and the sub thread).
The fact that 2 worked and 3 worked indicates to me that it's not simply a
bug involving the lock mechanism, it's definitely something to do with
writeln.
I'd file a bug with the latest code you posted.
I tried the original code once on Linux. I get much more printouts than 2
or 3, but it still hangs.
So it's cross-platform.
-Steve
More information about the Digitalmars-d
mailing list