Bjoern Petri created CELIX-233:
----------------------------------

             Summary: Replace booleans as sync primitives
                 Key: CELIX-233
                 URL: https://issues.apache.org/jira/browse/CELIX-233
             Project: Celix
          Issue Type: Bug
            Reporter: Bjoern Petri
            Assignee: Bjoern Petri


In a lot of cases we use boolean variables (e.g. bool running) to determine 
whether a critical section can be executed. Usually those variables are not 
declared volatile, so the they may be cached in registers. Before the value in 
the register is written to memory, another thread might be scheduled to run, 
resulting in that thread reading stale data.

But even when declaring a variable as volatile (although the volatile qualifier 
guarantees that the reads and writes will happen in the exact order specified 
in the source code), the compiler may generate code which reorders a volatile 
read or write with non-volatile reads or writes, thus limiting its usefulness 
as an interthread flag or mutex.

That's why it should be preferable to use e.g. a mutex as sync primitive




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to