
On 8/2/2011 12:28 PM, Phil Endecott wrote:
The thing that I believe is missing is tests. Do you have any thoughts about that?
I agree some basic thread safety tests are good to at least suggest that things are working as expected. It's impossible to guarantee it. The effectiveness of such non-deterministic tests depends on the hardware concurrency of the testing host (and also what other processes it's running). My basic thread safety testing technique is: void testThreadSafetyWorker(boost::barrier* testBarrier) { testBarrier->wait(); // wait until all threads have started try { // run tests using shared atomics } catch (exception& e) { cerr << "Exception in worker thread: " << e.what() << endl; } catch (...) { cerr << "Unhandled exception in worker thread." << endl; } } void testThreadSafety(const int& testThreadCount) { boost::barrier testBarrier(testThreadCount); boost::thread_group testThreadGroup; for (int i=0; i < testThreadCount; ++i) testThreadGroup.add_thread(new boost::thread(&testThreadSafetyWorker, &testBarrier)); testThreadGroup.join_all(); } I try it for 2, 4, 6, 8 threads. Hope this helps, -Matt