One way came to my mind right now, is there possibility to introduce versioning here?<div>Say AtomicInteger version is incremented each time, the counter state is changed, whether it is boundary change or value change. And instead of checking value and boundary I&#39;ll just check if the version was changed?</div>
<div><br></div><div>Looks like a possibility to me, but please judge my thinking :)</div><div><br></div><div>Thanks </div><div><br><div class="gmail_quote">2011/9/6 Oleksiy Khilkevich <span dir="ltr">&lt;<a href="mailto:oleksiy.khilkevich@gmail.com">oleksiy.khilkevich@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Concurrency Champs<div><br></div><div>I&#39;m implementing non-blocking cyclic counter mostly for learning purposes, and faced the following problem, which i&#39;m not sure how to solve.</div>
<div><br></div><div>The method in question implements the following </div>
<div><br></div><div>    /**</div><div>     * Sets counter value to initial (boundary) value</div><div>     * @return true if counter value was changed</div><div>     */</div><div>    boolean reset();</div><div><br></div>
<div>
The implementation I&#39;m not sure about</div><div><br></div><div>    @Override</div><div>    public boolean reset() {</div><div>        for (;;) {</div><div>            int curValue = value.get();</div><div>            int curBoundary = boundary.get();</div>

<div>            if (curValue == curBoundary) return false;</div><div><br></div><div>            // TODO: if boundary and value were not changed, set the value to boundary</div><div><br></div><div>            return true;</div>

<div>        }</div><div>    }</div><div><br></div><div>Here I have two values which are both AtomicIntegers and which may change - value can be incremented or decremented by another thread, and boundary can be changed too. </div>

<div><br></div><div>I&#39;m not quite sure how to do this without introducing critical sections. In general the question refers to any shared state change based on values of several other shared states.</div><div><br></div>

<div>What is the correct way to implement such operation atomically without critical sections? IS it possible to build composite CAS operations based on AtomicInteger#compareAndSet ?</div><div><br></div><div>Thank you and kindly waiting for your ideas</div>

<div>Oleksiy</div><font color="#888888"><div><br></div>
</font></blockquote></div><br></div>