Blame tbb-2019-test-thread-monitor.patch
|
|
491303e |
--- tbb-2020.2/oneTBB-2020.2/src/rml/test/test_thread_monitor.cpp 2020-03-30 13:38:06.000000000 +0200
|
|
|
491303e |
+++ oneTBB-2020.2/src/rml/test/test_thread_monitor.cpp 2020-04-27 15:43:34.209452298 +0200
|
|
|
491303e |
@@ -23,6 +23,7 @@
|
|
|
491303e |
#include "thread_monitor.h"
|
|
|
491303e |
#include "harness_memory.h"
|
|
|
491303e |
#include "tbb/semaphore.cpp"
|
|
|
491303e |
+#include <atomic>
|
|
|
491303e |
|
|
|
491303e |
class ThreadState {
|
|
|
491303e |
void loop();
|
|
|
491303e |
@@ -33,21 +34,21 @@
|
|
|
7dab124 |
}
|
|
|
7dab124 |
typedef rml::internal::thread_monitor thread_monitor;
|
|
|
7dab124 |
thread_monitor monitor;
|
|
|
7dab124 |
- volatile int request;
|
|
|
7dab124 |
- volatile int ack;
|
|
|
7dab124 |
- volatile unsigned clock;
|
|
|
7dab124 |
- volatile unsigned stamp;
|
|
|
491303e |
+ std::atomic<int> request;
|
|
|
491303e |
+ std::atomic<int> ack;
|
|
|
491303e |
+ std::atomic<unsigned> clock;
|
|
|
7dab124 |
+ unsigned stamp;
|
|
|
7dab124 |
ThreadState() : request(-1), ack(-1), clock(0) {}
|
|
|
7dab124 |
};
|
|
|
7dab124 |
|
|
|
7dab124 |
void ThreadState::loop() {
|
|
|
7dab124 |
for(;;) {
|
|
|
7dab124 |
- ++clock;
|
|
|
7dab124 |
if( ack==request ) {
|
|
|
7dab124 |
thread_monitor::cookie c;
|
|
|
7dab124 |
monitor.prepare_wait(c);
|
|
|
7dab124 |
if( ack==request ) {
|
|
|
491303e |
- REMARK("%p: request=%d ack=%d\n", this, request, ack );
|
|
|
491303e |
+ REMARK("%p: request=%d ack=%d\n", this, request.load(), ack.load() );
|
|
|
7dab124 |
+ ++clock;
|
|
|
7dab124 |
monitor.commit_wait(c);
|
|
|
7dab124 |
} else
|
|
|
7dab124 |
monitor.cancel_wait();
|
|
|
491303e |
@@ -60,7 +61,7 @@
|
|
|
7dab124 |
rml::internal::thread_monitor::yield();
|
|
|
7dab124 |
}
|
|
|
7dab124 |
int r = request;
|
|
|
7dab124 |
- ack = request;
|
|
|
7dab124 |
+ ack = r;
|
|
|
7dab124 |
if( !r ) return;
|
|
|
7dab124 |
}
|
|
|
7dab124 |
}
|
|
|
491303e |
@@ -89,7 +90,7 @@
|
|
|
7dab124 |
REPORT("Warning: thread %d not waiting\n",i);
|
|
|
7dab124 |
break;
|
|
|
7dab124 |
}
|
|
|
7dab124 |
- } while( t[i].stamp!=t[i].clock );
|
|
|
7dab124 |
+ } while( t[i].stamp==0 || t[i].stamp!=t[i].clock );
|
|
|
7dab124 |
}
|
|
|
7dab124 |
}
|
|
|
7dab124 |
REMARK("notifying threads\n");
|