Asynchronously cancellable thread | Calling thread might be cancelled in an unsafe state |
Atomic load and store sequence not atomic | Variable accessible between load and store operations |
Atomic variable accessed twice in an expression | Variable can be modified between accesses |
Automatic or thread local variable escaping from a thread | Variable is passed from one thread to another without ensuring that variable stays
alive through duration of latter thread |
Blocking operation while holding lock | Task performs lengthy operation while holding a lock |
Data race | Multiple tasks perform unprotected nonatomic operations on shared variable |
Data race including atomic operations | Multiple tasks perform unprotected operations on shared
variable |
Data race on adjacent bit fields | Multiple threads perform unprotected operations on adjacent bit fields of a shared
data structure |
Data race through standard library function call | Multiple tasks make unprotected calls to thread-unsafe
standard library function |
Deadlock | Call sequence to lock functions cause two tasks to block
each other |
Destruction of locked mutex | Task tries to destroy a mutex in the locked state |
Double lock | Lock function is called twice in a task without an intermediate
call to unlock function |
Double unlock | Unlock function is called twice in a task without an intermediate
call to lock function |