- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/thread.cfa
r2210cfc r5d1ebb9 10 10 // Created On : Tue Jan 17 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jan 10 17:05:35 202213 // Update Count : 2812 // Last Modified On : Thu Jan 13 20:11:55 2022 13 // Update Count : 42 14 14 // 15 15 … … 25 25 #include "invoke.h" 26 26 27 uint64_t thread_rand(); 28 29 extern uint32_t __thread_seed; // global thread seed 27 extern uint32_t __global_random_seed; 30 28 31 29 //----------------------------------------------------------------------------- … … 41 39 self_mon.owner = &this; 42 40 self_mon.recursion = 1; 43 random_state = __thread_seed;44 41 self_mon_p = &self_mon; 45 42 curr_cluster = &cl; … … 48 45 preferred = ready_queue_new_preferred(); 49 46 last_proc = 0p; 47 random_state = __global_random_seed; 50 48 #if defined( __CFA_WITH_VERIFY__ ) 51 49 canary = 0x0D15EA5E0D15EA5Ep; … … 174 172 } 175 173 176 uint64_t thread_rand() { 177 disable_interrupts(); 178 uint64_t ret = __tls_rand(); 179 enable_interrupts(); 180 return ret; 181 } 182 174 //----------------------------------------------------------------------------- 183 175 #define GENERATOR LCG 184 176 185 inline uint32_t MarsagliaXor( uint32_t & state ) { 186 state ^= state << 6; 187 state ^= state >> 21; 188 state ^= state << 7; 189 return state; 190 } // MarsagliaXor 191 192 inline uint32_t LCG( uint32_t & state ) { // linear congruential generator 193 return state = 36969 * (state & 65535) + (state >> 16); // 36969 is NOT prime! 194 } // LCG 195 196 void set_seed( uint32_t seed ) { active_thread()->random_state = seed; __thread_seed = seed; } 177 void set_seed( uint32_t seed ) { 178 active_thread()->random_state = __global_random_seed = seed; 179 GENERATOR( active_thread()->random_state ); 180 } // set_seed 197 181 uint32_t prng( void ) { return GENERATOR( active_thread()->random_state ); } // [0,UINT_MAX] 198 182
Note: See TracChangeset
for help on using the changeset viewer.