It's the "read_image_" line that seems to be where it hangs up for me, on the fourth line from the end with the comment "¡Fails here!". The invocation (for 5 threads) is: mtFileWork t. '' MUTEX [ mtFileWork t. '' MUTEX [ mtFileWork t. '' MUTEX [ mtFileWork t. '' MUTEX [ mtFileWork t. '' MUTEX
On Tue, May 10, 2022 at 6:22 PM Henry Rich <henryhr...@gmail.com> wrote: > What do I run to make it fail? > > Henry Rich > > On 5/10/2022 6:01 PM, Devon McCormick wrote: > > Henry, > > Here is the MVF - minimum viable failure. It looks like the culprit is > > "read_image" which is just a cover for "readimg_jqtide_". I'm running > > under jconsole. > > > > Set up in a directory with some .JPG files: > > FLS=: 0{"1 dir '*.jpg' > > createThreads 5 > > MUTEX=: 10 T. 1 NB. Recursive mutex; either fails. > > > > mtFileWork=: 3 : 0 > > tm=. 6!:1'' > > while. 0<#FLS do. > > tn=. ":3 T. '' NB. Thread number as char > > varnm=. ' '-.~'threadVar',tn > > smoutput 'Thread ',tn,' locking at ',":qts'' > > 11 T. y > > smoutput 'Thread ',tn,' locked at ',":qts'' > > (varnm,' FLS')=: split FLS > > smoutput 'Thread ',tn,' unlocking at ',(":qts''),' for file > ',flnm=. > >> ".varnm > > 13 T. y > > smoutput 'Thread ',tn,' unlocked at ',":qts'' > > #read_image flnm NB. ¡Fails here! > > end. > > tm=. tm,~6!:1'' > > NB.EG mtFileWork t. '' MUTEX [ mtFileWork t. '' MUTEX [ mtFileWork t. '' > > MUTEX [ mtFileWork t. '' MUTEX [ mtFileWork t. '' MUTEX > > ) > > > > Any help is appreciated! > > > > Thanks, > > > > Devon > > > > On Tue, May 10, 2022 at 4:46 PM Henry Rich <henryhr...@gmail.com> wrote: > > > >> If you can get me a version that fails on Windows I'll look at it. > >> > >> Henry Rich > >> > >> On 5/10/2022 4:20 PM, Devon McCormick wrote: > >>> Hi, > >>> > >>> Has anyone had success using the multi-threading mutex primitives? > I've > >>> had limited success - I'll be presenting some basic routines at NYCJUG > >> this > >>> evening (18:00 EDT - > >>> https://www.meetup.com/J-Dynamic-Functional-Programming/) - but have > >> been > >>> unable to run multiple threads on a real-life process without crashing > J. > >>> > >>> The following simplified demo seems to work OK but the version of this > >>> where I do actual work crashes - with "Process shell<1> exited > abnormally > >>> with code 5" - after two to thirty repetitions. > >>> > >>> MUTEX=: 10 T. 0 NB. Fast mutex > >>> createThreads=: 3 : '{{ 0 T. '''' }} ^:y]''''' > >>> qts=: 6!:0 > >>> createThreads 5 > >>> GVAR=: 100?@$1e6 NB. Initialize global threads > >> will > >>> consume > >>> > >>> multiLockMsgUnlock=: 3 : 0 > >>> while. 0<#GVAR do. > >>> tn=. ":3 T. '' NB. Thread number as char > >>> varnm=: ' '-.~'threadVar',tn > >>> smoutput 'Thread ',tn,' locking at ',":qts'' > >>> 11 T. y > >>> smoutput 'Thread ',tn,' locked at ',":qts'' > >>> (varnm,' GVAR')=: split GVAR > >>> smoutput 'Thread ',tn,' unlocking at ',(":qts''),' with > >>> ',tn,'=',":".varnm > >>> 13 T. y > >>> smoutput 'Thread ',tn,' unlocked at ',(":qts''),'; > >> #GVAR=',":#GVAR > >>> end. > >>> ) > >>> NB. Start five processes (one line): > >>> multiLockMsgUnlock t. '' MUTEX [ multiLockMsgUnlock t. '' MUTEX [ > >>> multiLockMsgUnlock t. '' MUTEX [ multiLockMsgUnlock t. '' MUTEX [ > >>> multiLockMsgUnlock t. '' MUTEX > >>> > >>> The actual work I'm doing is on files, a list of whose names > corresponds > >> to > >>> the GVAR vector above. > >>> > >>> Any suggestions are welcome. > >>> > >>> Cheers, > >>> > >>> Devon > >>> > >> > >> -- > >> This email has been checked for viruses by AVG. > >> https://www.avg.com > >> > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > >> > > > > > -- > This email has been checked for viruses by AVG. > https://www.avg.com > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > -- Devon McCormick, CFA Quantitative Consultant ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm