| // #include <boost/thread/lock_guard.hpp> | |
| namespace util | |
| { | |
| namespace | |
| { | |
| /** Lock to protect randomizer. | |
| * | |
| * This module is implemented in terms of rand()/srand() from <cstdlib>. | |
| * These functions are standard C, but they're not thread-safe. Scalability | |
| * is not worth much complexity here, so just slap a mutex around it. | |
| */ | |
| boost::mutex rand_lock; | |
| } // namespace | |
| void rand_init(unsigned int seed) | |
| { | |
| boost::lock_guard<boost::mutex> lock(rand_lock); | |
| srand(seed); | |
| } | |
| void rand_init() | |
| { | |
| rand_init(time(NULL)); | |
| } | |
| namespace internal | |
| { | |
| // This is the one call to the actual randomizer. All else is built on this. | |
| int rand_int() | |
| { | |
| boost::lock_guard<boost::mutex> lock(rand_lock); | |
| return std::rand(); | |
| } | |
| } // namespace internal | |
| } // namespace util | |