fix read access on loop condition

This commit is contained in:
Ben Harris 2016-09-09 12:36:28 -04:00
parent b8f2b652cb
commit dd1bac08c8
2 changed files with 7 additions and 3 deletions

View File

@ -30,12 +30,14 @@ int main (int argc, char **argv) {
}
void* collatz (void* arg) {
while (curr <= one_mil) {
while (true) {
pthread_mutex_lock(&currMutex);
bool keep_going = curr <= one_mil;
unsigned long long tmp = curr;
unsigned int start = curr;
curr++;
pthread_mutex_unlock(&currMutex);
if (!keep_going) break;
int cnt = 0;
while (tmp != 1) {

View File

@ -28,7 +28,7 @@ class Collatz {
}
class CollatzCalc implements Runnable {
Curr curr; Prev prev; Max max; long tmp; int start, cnt;
Curr curr; Prev prev; Max max; long tmp; int start, cnt; boolean keep_going;
public CollatzCalc (Curr curr, Prev prev, Max max) {
this.curr = curr;
@ -37,12 +37,14 @@ class CollatzCalc implements Runnable {
}
public synchronized void run () {
while (curr.curr <= Collatz.one_mil) {
while (true) {
synchronized (curr) {
keep_going = curr.curr <= Collatz.one_mil;
tmp = curr.curr;
start = curr.curr;
curr.curr++;
}
if (!keep_going) break;
cnt = 0;
while (tmp != 1) {