| 1 | // Copyright 2009-2021 Intel Corporation |
| 2 | // SPDX-License-Identifier: Apache-2.0 |
| 3 | |
| 4 | #pragma once |
| 5 | |
| 6 | #include "platform.h" |
| 7 | #include "mutex.h" |
| 8 | #include "alloc.h" |
| 9 | #include "vector.h" |
| 10 | #include <vector> |
| 11 | |
| 12 | namespace embree |
| 13 | { |
| 14 | /*! type for thread */ |
| 15 | typedef struct opaque_thread_t* thread_t; |
| 16 | |
| 17 | /*! signature of thread start function */ |
| 18 | typedef void (*thread_func)(void*); |
| 19 | |
| 20 | /*! creates a hardware thread running on specific logical thread */ |
| 21 | thread_t createThread(thread_func f, void* arg, size_t stack_size = 0, ssize_t threadID = -1); |
| 22 | |
| 23 | /*! set affinity of the calling thread */ |
| 24 | void setAffinity(ssize_t affinity); |
| 25 | |
| 26 | /*! the thread calling this function gets yielded */ |
| 27 | void yield(); |
| 28 | |
| 29 | /*! waits until the given thread has terminated */ |
| 30 | void join(thread_t tid); |
| 31 | |
| 32 | /*! destroy handle of a thread */ |
| 33 | void destroyThread(thread_t tid); |
| 34 | |
| 35 | /*! type for handle to thread local storage */ |
| 36 | typedef struct opaque_tls_t* tls_t; |
| 37 | |
| 38 | /*! creates thread local storage */ |
| 39 | tls_t createTls(); |
| 40 | |
| 41 | /*! set the thread local storage pointer */ |
| 42 | void setTls(tls_t tls, void* const ptr); |
| 43 | |
| 44 | /*! return the thread local storage pointer */ |
| 45 | void* getTls(tls_t tls); |
| 46 | |
| 47 | /*! destroys thread local storage identifier */ |
| 48 | void destroyTls(tls_t tls); |
| 49 | } |
| 50 | |