Reworked the threadpool cancellation mechanism to not depend on pthread_cancel since it turns out that pthread_cancel doesn't work properly on numerous platforms.

This commit is contained in:
Benoit Steiner
2016-12-09 13:05:14 -08:00
parent 3d59a47720
commit 2f5b7a199b
5 changed files with 48 additions and 26 deletions

View File

@@ -104,23 +104,15 @@ static void test_parallelism()
static void test_cancel()
{
NonBlockingThreadPool tp(4);
NonBlockingThreadPool tp(2);
#ifdef EIGEN_SUPPORTS_THREAD_CANCELLATION
std::cout << "Thread cancellation is supported on this platform" << std::endl;
// Schedule a large number of closure that each sleeps for one second. This
// will keep the thread pool busy for much longer than the default test timeout.
for (int i = 0; i < 1000; ++i) {
tp.Schedule([]() { sleep(2); });
}
// Put 2 threads to sleep for much longer than the default test timeout.
tp.Schedule([]() { sleep(3600); } );
tp.Schedule([]() { sleep(3600 * 24); } );
#else
std::cout << "Thread cancellation is a no-op on this platform" << std::endl;
// Make 2 threads sleep for a short period of time
tp.Schedule([]() { sleep(1); } );
tp.Schedule([]() { sleep(2); } );
#endif
// Call cancel:
// Cancel the processing of all the closures that are still pending.
tp.Cancel();
}