Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/thread.cfa

    r2210cfc r5d1ebb9  
    1010// Created On       : Tue Jan 17 12:27:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 10 17:05:35 2022
    13 // Update Count     : 28
     12// Last Modified On : Thu Jan 13 20:11:55 2022
     13// Update Count     : 42
    1414//
    1515
     
    2525#include "invoke.h"
    2626
    27 uint64_t thread_rand();
    28 
    29 extern uint32_t __thread_seed;                                                  // global thread seed
     27extern uint32_t __global_random_seed;
    3028
    3129//-----------------------------------------------------------------------------
     
    4139        self_mon.owner = &this;
    4240        self_mon.recursion = 1;
    43         random_state = __thread_seed;
    4441        self_mon_p = &self_mon;
    4542        curr_cluster = &cl;
     
    4845        preferred = ready_queue_new_preferred();
    4946        last_proc = 0p;
     47        random_state = __global_random_seed;
    5048        #if defined( __CFA_WITH_VERIFY__ )
    5149                canary = 0x0D15EA5E0D15EA5Ep;
     
    174172}
    175173
    176 uint64_t thread_rand() {
    177         disable_interrupts();
    178         uint64_t ret = __tls_rand();
    179         enable_interrupts();
    180         return ret;
    181 }
    182 
     174//-----------------------------------------------------------------------------
    183175#define GENERATOR LCG
    184176
    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; }
     177void set_seed( uint32_t seed ) {
     178        active_thread()->random_state = __global_random_seed = seed;
     179        GENERATOR( active_thread()->random_state );
     180} // set_seed
    197181uint32_t prng( void ) { return GENERATOR( active_thread()->random_state ); } // [0,UINT_MAX]
    198182
Note: See TracChangeset for help on using the changeset viewer.