You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by "Pepijn Noltes (JIRA)" <ji...@apache.org> on 2015/05/16 09:46:00 UTC

[jira] [Commented] (CELIX-233) Replace booleans as sync primitives

    [ https://issues.apache.org/jira/browse/CELIX-233?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14546627#comment-14546627 ] 

Pepijn Noltes commented on CELIX-233:
-------------------------------------

Hi,

As for as I known this is not correct. A bool as thread sync does not need to be volatile, the cpu cache will invalidate the local values when a update occurs. The only thing to make sure is that there are not multiple threads updating the boolean with different values (false/true). 

So IMO bool as thread sync are fine and better for performance.


> 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)