# Prange, race condition and writing to arrays

**URL:** <https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays/1750>\
**Category:** Numba\
**Created:** [January 27, 2023, 1:14am UTC](https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays/1750 "2023-01-27T01:14:19Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![mykd](https://avatars.discourse-cdn.com/v4/letter/m/4491bb/32.png) [@mykd](https://numba.discourse.group/u/mykd)\
**Post date:** [January 27, 2023, 1:14am UTC](https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays/1750/1 "2023-01-27T01:14:19Z")

</div>

This is simplified representation of the calculation I am trying to do. I know one could vectorize the function and resolve the issue, but I am using the cosine function as a standalone for an involved calculation.

```auto
@njit(cache=True,parallel=True)
def freeOH_cosine(cosAngle=np.array([]),is_allCosAngle=False):
    _M=cosAngle.shape[0]
    Angle=cos2Angle=cos3Angle=np.zeros((_M),dtype=np.float64)
    #cos2Angle=np.zeros((_M),dtype=np.float64)
    #cos3Angle=np.zeros((_M),dtype=np.float64)
    for i in numba.prange(_M):
        Angle[i]=np.arccos(cosAngle[i])
        if is_allCosAngle:
           cos2Angle[i]=cosAngle[i]**2
           cos3Angle[i]=cosAngle[i]**3
    
    if is_allCosAngle:
       return cosAngle, cos2Angle, cos3Angle, Angle*180.0/np.pi
    else:
       return cosAngle, np.nan, np.nan, Angle*180.0/np.pi

```

With what I have read online, writing to an array in parallel can create a whole host of problems. So If we have a case where one needs to extract individual array elements, what should be done in that case? I am sorry if this seems elementary, but it is not exactly clear to me how can one extract granular information from a parallelized calculation if it is unsafe to write in parallel.

---

<div class="post-metadata">

**Author:** ![nelson2005](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/nelson2005/32/47_2.png) [@nelson2005](https://numba.discourse.group/u/nelson2005)\
**Post date:** [January 27, 2023, 3:05am UTC](https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays/1750/2 "2023-01-27T03:05:42Z")

</div>

What’s unsafe about writing into numpy array in parallel?

---

<div class="post-metadata">

**Author:** ![mykd](https://avatars.discourse-cdn.com/v4/letter/m/4491bb/32.png) [@mykd](https://numba.discourse.group/u/mykd)\
**Post date:** [January 27, 2023, 3:13am UTC](https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays/1750/3 "2023-01-27T03:13:15Z")

</div>

I should have clearly mentioned it. I meant race conditions.

---

<div class="post-metadata">

**Author:** ![nelson2005](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/nelson2005/32/47_2.png) [@nelson2005](https://numba.discourse.group/u/nelson2005)\
**Post date:** [January 27, 2023, 4:21am UTC](https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays/1750/4 "2023-01-27T04:21:00Z")

</div>

I guess I’m missing something. What is the race condition with writing to different array indexes in parallel?

---

<div class="post-metadata">

**Author:** ![mykd](https://avatars.discourse-cdn.com/v4/letter/m/4491bb/32.png) [@mykd](https://numba.discourse.group/u/mykd)\
**Post date:** [January 27, 2023, 7:06pm UTC](https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays/1750/5 "2023-01-27T19:06:15Z")

</div>

Hi, I think I am getting confused here. Can I post a new question and link it to you?

[https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays-part-2/1754](https://numba.discourse.group/t/prange-race-condition-and-writing-to-arrays-part-2/1754)
