Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

In one of my server application I have a class that look like,

class A
{
   static int _value = 0;
   void DoSomething()
   {
         // a request start here
          _value = 0;
         _value++;
         // a request end here
   }
   // This method can be called many time during request
   void SomeAsyncMethods()
   {
         _value++;
   }
}

The problem is SomeAsyncMethods is async. Can be called many times. What I need when a request start set _value = 0 and then asynchrosnously increment this. After end of request I need the total. But the problem is that another request at the same time can access the class.

share|improve this question

1 Answer 1

up vote 4 down vote accepted

use

System.Threading.Interlocked.Increment( ref _value );

instead of

_value++;

Interlocked.Increment

If multiple requests share this class and each one should get its own counter you need a non static counter that you pass to all threads working on this request.

Like this

class A
{
    void DoSomething()
    {
        // a request start here
        RequestData data = new RequestData();
        request.IncrementValue();
        // a request end here
    }

    // This method can be called many time during request
    void SomeAsyncMethods( RequestData request )
    {
        request.IncrementValue();
    }
}

class RequestData
{
    int _value = 0;

    public void IncrementValue()
    {
        System.Threading.Interlocked.Increment( ref _value );
    }
}
share|improve this answer
    
Make sense thanks. –  user960567 Dec 10 '12 at 13:39

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.