Win a copy of Murach's Python Programming this week in the Jython/Python forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

Variable increment problem (threads)  RSS feed

 
Naveen Koneti
Greenhorn
Posts: 13
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi All,

I have a problem in my project.Some thing like I will be spawning n number of threads.These threads have a increment two variables x and y.And these threads have to run infinitly each time incrementing and using those variables.After some time I am getting these variables being increments out of sync though i am incrementing them in a syncronized method.
ex: if I give initial variables as x = 100 and y =200.after running the program say after 5 min those variables are becoming something like 144 & 251 but I am expecting them to be 191 & 291.
my method is like this

static long x = 0;
static long y = 0;
public void run()
{
while(true)
{ increment();//increments the variables }
if(someCondition)
{ thread.yield(); return;//terminating execution }
}

static synchronized increment()
{
x++;
y++;
}
 
Ernest Friedman-Hill
author and iconoclast
Sheriff
Posts: 24215
37
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
They should appear to be in sync to any thread that reads them in a matching synchronized method or block.

Please don't post the same question in multiple forums. I'm going to move this one to the Threads forum and delete the other copy.
 
Arun Bommannavar
Ranch Hand
Posts: 53
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Naveen Koneti:
Hi All,

I have a problem in my project.Some thing like I will be spawning n number of threads.These threads have a increment two variables x and y.And these threads have to run infinitly each time incrementing and using those variables.After some time I am getting these variables being increments out of sync though i am incrementing them in a syncronized method.
ex: if I give initial variables as x = 100 and y =200.after running the program say after 5 min those variables are becoming something like 144 & 251 but I am expecting them to be 191 & 291.
my method is like this

static long x = 0;
static long y = 0;
public void run()
{
while(true)
{ increment();//increments the variables }
if(someCondition)
{ thread.yield(); return;//terminating execution }
}

static synchronized increment()
{
x++;
y++;
}


Have you tried making x and y volatile?
 
Jim Yingst
Wanderer
Sheriff
Posts: 18671
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Volatile will not help here - you may read the values when x has been incremented but y has not. EFH's answer is correct:

Because this method is synchronized the same way the increment() method is, it should always see the same values for x and y. (Assuming there are no other unsynchronized methods that change x and y.)
 
Consider Paul's rocket mass heater.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!