簡體   English   中英

從指針讀取時的 OpenMP 競爭條件

[英]OpenMP race condition while reading from pointer

我知道在 OpenMP 中讀取共享變量不會導致競爭條件,因為每個線程都有自己的該變量副本。 但是如果共享變量是一個指針(例如指向一個容器),那么每個線程只會得到一個指針的副本。

如果我現在從指針指向的位置(我的容器)讀取數據,是否存在競爭條件,或者 OpenMP 是否會以某種方式解決這個問題?

在線程之間共享容器本身的副本而不是指向它的指針是否更好?

僅從變量中讀取不會產生競爭條件:變量是否共享並不重要。 要產生競爭條件,您需要有兩個或多個線程嘗試同時修改變量的同一個實例。

然后,假設您的線程正在讀取和修改某個變量,如果您將此變量設為共享,您仍然會遇到競爭條件,因為所有線程共享同一個實例。 正如@ilotXXI 指出的那樣,我想在你的第一段中你想說私人。

關於您關於指針私有化的問題,如果該指針的兩個或更多實例指向相同的數據並且他們修改它,您將有一個競爭條件(每個線程都有指針的私有版本,但沒有數據的私有版本)。

請注意,從一個數據共享條款更改為另一個可能會更改您的應用程序的行為。 因此,一般而言,當您並行化應用程序時,您首先要做的是分析您的應用程序正在執行哪種類型的數據訪問。 一旦知道這一點,就必須考慮應該使用哪些數據共享子句和哪些同步構造(如果需要)來保持應用程序的原始行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM