[M3devel] Downsides of Modula-3 ?

Rodney M. Bates rodney_bates at lcwb.coop
Sun Apr 29 23:49:22 CEST 2012



On 04/27/2012 12:49 PM, Mika Nystrom wrote:
> =?utf-8?Q?Dragi=C5=A1a_Duri=C4=87?= writes:
>> I do not doubt they are created. Probably not an issue with 3 threads =
>> here, 3 threads there, but it can be if one relies on "must be created =
>> after some arbitrary time" in any synchronization. I did, and SRC people =
>> did, at least in two places. I just don't see it as a good practice.
>
> Yes I have had that bug in my programs a few times.
>
> But to be really fair it's not that you're assuming that another
> thread is created by a certain time but you're assuming that it has
> done something by the time the first thread needs to do something else.
> In the examples of the sort you describe it is usually that the newly
> created thread has "had time to initialize" (in some way).  My bug with
> this was of this nature:
>
> thread A:
>
> ... Thread.Fork(b)... wait... LOCK(b.mu)
>
> Thread B:
>
> ... self.mu := NEW(MUTEX) ...
>
> Oops!  works on some threading implementations (user threads).
> Instant segfault on others!

As I recall, this is the reason Thread.T <: MUTEX.  Otherwise, there would be
chicken-egg cases like this where you need a mutex to protect the allocation
of a  mutex and have no dependable way to get one.

>
> Have fun with the thread tester.  It doesn't find any problems with
> user threads.
>
> I should probably have dug into the pthreads myself long ago but it's
> always so far down the todo list, and all my CM3 installations use user
> threads by necessity.  If you can improve the pthreads I think it would
> make me much happier about CM3 in general.  I still use PM3 as much as
> possible...
>
>      Mika
>
>
>>
>> BTW, your test is excellent stress machine. My laptops hate it, =
>> probably, till now :). Right now I am focused  on an allocation race =
>> issue and I hope to fix it in few hours/a day.
>>
>> On Apr 27, 2012, at 7:13 PM, Mika Nystrom wrote:
>>
>>> =3D?utf-8?Q?Dragi=3DC5=3DA1a_Duri=3DC4=3D87?=3D writes:
>>> ...
>>>> I am reading your source code just now. And one thing caught my eye: =
>> =3D
>>>> "Each type of thread starts by sleeping for a while, to give the =
>> other =3D
>>>> threads a chance to be created." Does not look like any guarantee to =
>> me, =3D
>>>> not in threaded application.=3D20=3D
>>> =20
>>> If the program prints "running" then all threads have been created.
>>> =20
>>> It eventually prints "running".
>>> =20
>>> Therefore all threads are created.
>>> =20
>>> ---
>>> =20
>>> The things wrong with CM3's pthreads threading are NOT subtle.
>>> The runtime completely freezes up, ctrl-C stops working, and other
>>> such things.
>>> =20
>>>     Mika
>



More information about the M3devel mailing list