Yes, the crash is jqt related -- that initial echo does not cause a problem in jconsole.
Thanks again, -- Raul On Wed, Jun 1, 2022 at 7:29 PM Raul Miller <[email protected]> wrote: > > Hmm... it "works" if I remove the first echo in the verb 'task'. > > metcon=: {{ > lock=: 10 T. 0 > sleep=: 6!:3 > task=: {{ > NB. echo 'Task ',y,&":' waiting...' > 11 T. lock NB. wait > sleep 2 > echo r=.'Task ',y,&":' has the semaphore' > 13 T. lock NB. release > r rplc 'has';'had' > }} > 0&T.@'' each i.0>.4-1 T.'' NB. ensure at least four threads > echo (":1 T. ''),' threads' > r=. > task t.''"0 i.10 NB. dispatch and wait for 10 tasks > 14 T. lock NB. discard lock > r > }} > > metcon'' > > I put "works" in scare quotes because the timing of the remaining echo > statements seems wrong. > > But this only happens under jqt -- when I run it from jconsole, the > timing between the echo statements seems uniform. > > All of which suggests that there's something odd about the mechanism > used to send messages to jqt from threads other than the main thread. > > Thanks, > > -- > Raul > > On Wed, Jun 1, 2022 at 7:23 PM Raul Miller <[email protected]> wrote: > > > > The (10$0 1) # was to work around the value error -- it's debugging code. > > > > However, I get the crash after removing it entirely. This happens > > using f. and this happens with task defined as a global name: > > > > metcon=: {{ > > lock=: 10 T. 0 > > sleep=: 6!:3 > > task=: {{ > > echo 'Task ',y,&":' waiting...' > > 11 T. lock NB. wait > > sleep 2 > > echo r=.'Task ',y,&":' has the semaphore' > > 13 T. lock NB. release > > r rplc 'has';'had' > > }} > > 0&T.@'' each i.0>.4-1 T.'' NB. ensure at least four threads > > echo (":1 T. ''),' threads' > > r=. > task t.''"0 i.10 NB. dispatch and wait for 10 tasks > > 14 T. lock NB. discard lock > > r > > }} > > > > Thanks, > > > > -- > > Raul > > > > > > On Wed, Jun 1, 2022 at 7:19 PM Elijah Stone <[email protected]> wrote: > > > > > > Right... I was chasing the wrong issue. The code is wrong. > > > > > > The issue is that 'task' is a proverb, and the new thread does not inherit > > > metcon's lexical scope (which would be tantamount to closures...maybe not > > > a > > > bad idea...), so 'task' is looked up globally, and found nowhere. Fixes > > > include making 'task' global (like 'lock' and 'sleep'), or using f. as I > > > suggested before. > > > > > > That the code appeared to work when not creating any threads is a bug. > > > > > > Incidentally, there is another issue: you destroy the mutex before > > > ensuring > > > that all threads are done. I suggest transposing (10$0 1)&# and > . > > > > > > On Wed, 1 Jun 2022, Elijah Stone wrote: > > > > > > > BTW, 11 T.lock is equivalent to 11 T.lock;_ . > > > > > > > > On Wed, 1 Jun 2022, Raul Miller wrote: > > > > > > > >> Oops, bad copy and paste > > > >> > > > >> Ignore the first (incomplete) declaration of metcon. > > > >> > > > >> Actually, please treat the declaration at > > > >> http://www.jsoftware.com/pipermail/beta/2022-June/010566.html as > > > >> canonical for this issue. > > > >> > > > >> Thanks, > > > >> > > > >> -- > > > >> Raul > > > >> > > > >> On Wed, Jun 1, 2022 at 3:57 PM Raul Miller <[email protected]> > > > >> wrote: > > > >>> > > > >>> https://www.rosettacode.org/wiki/Metered_concurrency > > > >>> > > > >>> I wanted to put together a more serious J implementation of the > > > >>> rosettacode metered concurrency task. > > > >>> > > > >>> Unfortunately, either (a) I do not understand how the threading > > > >>> primitives are supposed to work, or (b) they are not working properly. > > > >>> > > > >>> metcon=: {{ > > > >>> lock=: 10 T. 0 > > > >>> sleep=: 6!:3 > > > >>> metcon=: {{ > > > >>> lock=: 10 T. 0 > > > >>> sleep=: 6!:3 > > > >>> task=. {{ > > > >>> 11 T. lock;_ NB. wait > > > >>> sleep 2 > > > >>> echo r=.'Task ',y,&":' has the semaphore' > > > >>> 13 T. lock NB. release > > > >>> r rplc 'has';'had' > > > >>> }} > > > >>> 0&T.@'' each i.0>4-1 T.'' NB. ensure at least four threads > > > >>> r=. task t.''"0 i.10 NB. dispatch 10 tasks > > > >>> #each r NB. wait for completion > > > >>> 14 T. lock NB. discard lock > > > >>> r > > > >>> }} > > > >>> I expect this to take about 20 seconds (because of the use of 6!:3) > > > >>> and run ten tasks in 3 of the four guaranteed threads. > > > >>> > > > >>> Instead, what I get is this: > > > >>> > > > >>> metcon'' > > > >>> Task 1 has the semaphore > > > >>> Task 3 has the semaphore > > > >>> Task 5 has the semaphore > > > >>> Task 7 has the semaphore > > > >>> Task 9 has the semaphore > > > >>> |value error > > > >>> | #each r > > > >>> > > > >>> So it looks like half of my tasks are getting lost somewhere, and it > > > >>> looks like all of the results from those tasks are getting lost > > > >>> somewhere. > > > >>> > > > >>> JVERSION > > > >>> Engine: j904/j64avx2/windows > > > >>> Beta-d: commercial/2022-05-19T20:39:35 > > > >>> Library: 9.04.01 > > > >>> Qt IDE: 2.0.3/6.2.4(6.2.4) > > > >>> Platform: Win 64 > > > >>> Installer: J904 install > > > >>> InstallPath: c:/other/j904 > > > >>> Contact: www.jsoftware.com > > > >>> > > > >>> Thanks, > > > >>> > > > >>> -- > > > >>> Raul > > > >> ---------------------------------------------------------------------- > > > >> For information about J forums see http://www.jsoftware.com/forums.htm > > > > ---------------------------------------------------------------------- > > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
