Simplifies ThreadStartSemaphore's implementation.
This commit is contained in:
@@ -220,6 +220,7 @@
|
||||
#include <regex.h> // NOLINT
|
||||
#include <strings.h> // NOLINT
|
||||
#include <sys/types.h> // NOLINT
|
||||
#include <time.h> // NOLINT
|
||||
#include <unistd.h> // NOLINT
|
||||
|
||||
#define GTEST_USES_POSIX_RE 1
|
||||
@@ -935,28 +936,41 @@ class ThreadLocal {
|
||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal);
|
||||
};
|
||||
|
||||
// Sleeps for (roughly) n milli-seconds. This function is only for
|
||||
// testing Google Test's own constructs. Don't use it in user tests,
|
||||
// either directly or indirectly.
|
||||
inline void SleepMilliseconds(int n) {
|
||||
const timespec time = {
|
||||
0, // 0 seconds.
|
||||
n * 1000L * 1000L, // And n ms.
|
||||
};
|
||||
nanosleep(&time, NULL);
|
||||
}
|
||||
|
||||
// Allows a controller thread to pause execution of newly created
|
||||
// threads until signalled. Instances of this class must be created
|
||||
// and destroyed in the controller thread.
|
||||
//
|
||||
// This class is supplied only for testing Google Test's own
|
||||
// constructs. Do not use it in user tests, either directly or indirectly.
|
||||
// This class is only for testing Google Test's own constructs. Do not
|
||||
// use it in user tests, either directly or indirectly.
|
||||
class ThreadStartSemaphore {
|
||||
public:
|
||||
ThreadStartSemaphore();
|
||||
~ThreadStartSemaphore();
|
||||
ThreadStartSemaphore() : signalled_(false) {}
|
||||
|
||||
// Signals to all threads created with this semaphore to start. Must
|
||||
// be called from the controller thread.
|
||||
void Signal();
|
||||
void Signal() { signalled_ = true; }
|
||||
|
||||
// Blocks until the controller thread signals. Must be called from a test
|
||||
// thread.
|
||||
void Wait();
|
||||
void Wait() {
|
||||
while(!signalled_) {
|
||||
SleepMilliseconds(10);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
// We cannot use Mutex here as this class is intended for testing it.
|
||||
pthread_mutex_t mutex_;
|
||||
pthread_cond_t cond_;
|
||||
bool signalled_;
|
||||
volatile bool signalled_;
|
||||
|
||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadStartSemaphore);
|
||||
};
|
||||
@@ -971,8 +985,8 @@ class ThreadStartSemaphore {
|
||||
// ThreadWithParam<int> thread(&ThreadFunc, 5, &semaphore);
|
||||
// semaphore.Signal(); // Allows the thread to start.
|
||||
//
|
||||
// This class is supplied only for testing Google Test's own
|
||||
// constructs. Do not use it in user tests, either directly or indirectly.
|
||||
// This class is only for testing Google Test's own constructs. Do not
|
||||
// use it in user tests, either directly or indirectly.
|
||||
template <typename T>
|
||||
class ThreadWithParam {
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user