diff options
| -rw-r--r-- | private.c | 39 | 
1 files changed, 39 insertions, 0 deletions
| diff --git a/private.c b/private.c new file mode 100644 index 0000000..a880042 --- /dev/null +++ b/private.c @@ -0,0 +1,39 @@ +/* + * private.c + * + * Description: + * This translation unit implements routines which are private to + * the implementation and may be used throughout it. + */ + +#include <windows.h> +#include <process.h> +#include "pthread.h" +#include "implement.h" + +int +_pthread_getthreadindex(pthread_t thread) +{ +  /* The hash table works as follows: +     hash into the table, +     if the thread in this slot doesn't match then start single +     stepping from there until we find it. + +     The scheme should have these characteristics: +     - if the thread handle is a sequence number then the hash will +       succeed first time every time, +     - if the thread handle is a pseudo randomish value (eg. a pointer) +       then the hash should succeed first time most times. +   */ +  int t = _PTHREAD_HASH_INDEX(*thread); +  int it = t; /* The initial thread index */ + +  while ((_pthread_threads_table[t])->thread != thread) { +    t++; +    if (t == PTHREAD_THREADS_MAX) +      t = 0; /* Wrap around to the first slot */ +    if (t == it) +      return -1; /* Failed to find the thread */ +  } +  return t; +} | 
