bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: multi-threaded compiling


From: Mischa Baars
Subject: Re: multi-threaded compiling
Date: Mon, 11 Mar 2024 22:19:26 +0100

On Mon, 11 Mar 2024, 21:08 Kerin Millar, <kfm@plushkava.net> wrote:

> On Mon, 11 Mar 2024 15:36:48 -0400
> Greg Wooledge <greg@wooledge.org> wrote:
>
> > > On Mon, Mar 11, 2024, 20:13 Mischa Baars <mjbaars1977.backup@gmail.com
> >
> > > wrote:
> > >
> > > > Also I don't think that gives you an exit status for each 'exit $i'
> > > > started. I need that exit status.
> >
> > "wait -n" without a PID won't help you, then.  You don't get the PID or
> > job ID that terminated, and you don't get the exit status.  It's only
>
> It does convey the exit status.
>
> > of interest if you're trying to do something like "run these 100 jobs,
> > 5 at a time" without storing their exit statuses.
>
> The pid can be obtained with the -p option, as of 5.1. Below is a
> synthetic example of how it might be put into practice.
>
> #!/bin/bash
>
> declare -A job_by status_by
> max_jobs=4
> jobs=0
>
> wait_next() {
>         local pid
>         wait -n -p pid
>         status_by[$pid]=$?
>

How exactly is this indexing implemented internally? Does a first number on
index n take m bits (using a linked list) or does it take n * m bits (using
realloc(3))?

        unset -v 'job_by[$pid]'
> }
>
> worker() {
>         sleep "$(( RANDOM % 5 ))"
>         exit "$(( RANDOM % 2 ))"
> }
>
> for (( i = 0; i < 16; ++i )); do
>         (( jobs++ < max_jobs )) || wait_next
>         worker & job_by[$!]=
> done
>
> while (( ${#job_by[@]} )); do
>         wait_next
> done
>
> declare -p status_by
>
> --
> Kerin Millar
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]