# @threads and two functions calls inside a loop

**URL:** <https://discourse.julialang.org/t/threads-and-two-functions-calls-inside-a-loop/114512>\
**Category:** General Usage\
**Created:** [May 21, 2024, 2:06pm UTC](https://discourse.julialang.org/t/threads-and-two-functions-calls-inside-a-loop/114512 "2024-05-21T14:06:39Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ju\_ska](https://avatars.discourse-cdn.com/v4/letter/j/ecd19e/32.png) [@Ju\_ska](https://discourse.julialang.org/u/Ju_ska)\
**Post date:** [May 21, 2024, 2:06pm UTC](https://discourse.julialang.org/t/threads-and-two-functions-calls-inside-a-loop/114512/1 "2024-05-21T14:06:39Z")

</div>

Hi,

I have this use case:

```julia
@threads loop
    function(parameters_1)
    function(parameters_2)
end

```

I would like to maximize load, problem is that sometimes everything is finished but the last iteration of the loop, meaning function(parameters\_2) has to wait for function(parameters\_1) to finish.  
I don’t know how to handle that.

---

<div class="post-metadata">

**Author:** ![SteffenPL](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/steffenpl/32/206270_2.png) [@SteffenPL](https://discourse.julialang.org/u/SteffenPL)\
**Post date:** [May 21, 2024, 2:15pm UTC](https://discourse.julialang.org/t/threads-and-two-functions-calls-inside-a-loop/114512/2 "2024-05-21T14:15:26Z")

</div>

You could use `@spawn`, see [Announcing composable multi-threaded parallelism in Julia](https://julialang.org/blog/2019/07/multithreading/) or the official docs.

---

<div class="post-metadata">

**Author:** ![Ju\_ska](https://avatars.discourse-cdn.com/v4/letter/j/ecd19e/32.png) [@Ju\_ska](https://discourse.julialang.org/u/Ju_ska)\
**Post date:** [May 22, 2024, 10:01am UTC](https://discourse.julialang.org/t/threads-and-two-functions-calls-inside-a-loop/114512/3 "2024-05-22T10:01:38Z")

</div>

Thanks.

I ended up with:

```julia
using Base.Threads

@threads for elem in ["A", "B"]
    for i in 1:1:10
        x=@spawn println(elem * "1")
        y=@spawn println(elem * "2")
        wait(x)
        wait(y)
    end
end

```

Output:

```julia
B1
A1
A2
B2
A2
A1
B2
A1
A2
B1
A2
B1
B2
B2
A1
A2
A1
B1
A2
B1
A1
B2
A1
B2
A2
B1
A1
A2
B2
A1
A2
A1
B1
B1
B2
B1
B2
B2
B1
A2

```

Looks like it’s working.

---

<div class="post-metadata">

**Author:** ![Ju\_ska](https://avatars.discourse-cdn.com/v4/letter/j/ecd19e/32.png) [@Ju\_ska](https://discourse.julialang.org/u/Ju_ska)\
**Post date:** [May 22, 2024, 12:46pm UTC](https://discourse.julialang.org/t/threads-and-two-functions-calls-inside-a-loop/114512/4 "2024-05-22T12:46:37Z")

</div>

Mmm, sometimes with the real big processing I got:

```julia
nested task error: UndefVarError: `x` not defined

```
