# Question about the multithreading usage

**URL:** <https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955>\
**Category:** General Usage\
**Created:** [June 6, 2023, 6:05pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955 "2023-06-06T18:05:15Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![jianqixi](https://avatars.discourse-cdn.com/v4/letter/j/3be4f8/32.png) [@jianqixi](https://discourse.julialang.org/u/jianqixi)\
**Post date:** [June 6, 2023, 6:05pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955/1 "2023-06-06T18:05:16Z")

</div>

Hi, I have one question related to the multithreading calculation in Julia. It seems like the @threads for loop is not always safe to get what I want.

Here is one simple example of the code:  
‘’’ julia  
A = Any  
B = Any  
@threads for i in -1000:1000  
a = 0.001_i  
b = one vector + another vector_a  
push!(A, a)  
push!(B, b)  
end  
‘’’  
Then I found the length of A and B arrays are not equal to 2000. I am wondering what’s the reason for this, and how could we fix this issue. Thanks

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [June 6, 2023, 6:55pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955/2 "2023-06-06T18:55:08Z")

</div>

`push!()` to array is not thread-safe

---

<div class="post-metadata">

**Author:** ![jianqixi](https://avatars.discourse-cdn.com/v4/letter/j/3be4f8/32.png) [@jianqixi](https://discourse.julialang.org/u/jianqixi)\
**Post date:** [June 6, 2023, 6:58pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955/3 "2023-06-06T18:58:17Z")

</div>

I see, instated of using push!(), is append safe?

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [June 6, 2023, 7:01pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955/4 "2023-06-06T19:01:55Z")

</div>

no, use a `Channel` if you need to:

```julia
A = Channel()
B = Channel()
@threads for i in -1000:1000
    a = 0.001i
    b = one vector + another vectora
    put!(A, a)
    put!(B, b)
end

```

---

<div class="post-metadata">

**Author:** ![jianqixi](https://avatars.discourse-cdn.com/v4/letter/j/3be4f8/32.png) [@jianqixi](https://discourse.julialang.org/u/jianqixi)\
**Post date:** [June 6, 2023, 7:10pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955/5 "2023-06-06T19:10:24Z")

</div>

Thank you. I tested Channel(), it definitely works, but the following issue is that it is very time consuming. I am wondering how could we improve the efficiency of Channel(). Thanks

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [June 6, 2023, 7:13pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955/6 "2023-06-06T19:13:12Z")

</div>

if you make Channel typed it should work better, so many try something like

```julia
A = Channel{Complex}()
B = Channel{Vector{???}}()

```

---

<div class="post-metadata">

**Author:** ![jianqixi](https://avatars.discourse-cdn.com/v4/letter/j/3be4f8/32.png) [@jianqixi](https://discourse.julialang.org/u/jianqixi)\
**Post date:** [June 6, 2023, 7:21pm UTC](https://discourse.julialang.org/t/question-about-the-multithreading-usage/99955/7 "2023-06-06T19:21:09Z")

</div>

Thank you
