Skip to content

Commit

Permalink
Merge pull request #2 from iuliadmtru/index-by-threadid
Browse files Browse the repository at this point in the history
Indexing by `threadid()` should be avoided
  • Loading branch information
aviks authored Aug 6, 2023
2 parents 630c2db + 1389af1 commit 016b34f
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
27 changes: 27 additions & 0 deletions lang/correctness/index_by_threadid.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using Base.Threads: threadid, @threads

states = zeros(10)
Threads.@threads for i = 1:10
# ruleid: index-by-threadid
tid = Threads.threadid()
old_val = states[tid]
new_val = old_val + i
states[tid] = new_val
end

@threads for i = 1:10
# ruleid: index-by-threadid
tid = threadid()
val = states[tid]
states[tid] = val + 1
end

@threads :foo for i = 1:10
# ruleid: index-by-threadid
val = states[Threads.threadid()]
end

Threads.@threads :static for i = 1:10
# ok: index-by-threadid
val = states[Threads.threadid()]
end
31 changes: 31 additions & 0 deletions lang/correctness/index_by_threadid.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
rules:
- id: index-by-threadid
patterns:
- pattern-inside: |
@threads ... for $X = ...
...
end
- pattern-not-inside: |
@threads :static for $X = ...
...
end
- pattern-either:
- pattern: $S[Threads.threadid()]
- pattern: $S[threadid()]
- pattern: |
$TID = Threads.threadid()
...
$Y = $S[$TID]
- pattern: |
$TID = threadid()
...
$Y = $S[$TID]
message: Indexing by `threadid()` may cause race conditions and should be avoided.
metadata:
confidence: LOW
references:
- https://www.julialang.org/blog/2023/07/PSA-dont-use-threadid/
license: LGPL
languages:
- julia
severity: WARNING

0 comments on commit 016b34f

Please sign in to comment.