| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  | // Copyright 2009-2021 Intel Corporation
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  | // SPDX-License-Identifier: Apache-2.0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "platform.h"
 | 
					
						
							|  |  |  | #include "mutex.h"
 | 
					
						
							|  |  |  | #include "alloc.h"
 | 
					
						
							|  |  |  | #include "vector.h"
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace embree | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /*! type for thread */ | 
					
						
							|  |  |  |   typedef struct opaque_thread_t* thread_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! signature of thread start function */ | 
					
						
							|  |  |  |   typedef void (*thread_func)(void*); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! creates a hardware thread running on specific logical thread */ | 
					
						
							|  |  |  |   thread_t createThread(thread_func f, void* arg, size_t stack_size = 0, ssize_t threadID = -1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! set affinity of the calling thread */ | 
					
						
							|  |  |  |   void setAffinity(ssize_t affinity); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! the thread calling this function gets yielded */ | 
					
						
							|  |  |  |   void yield(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! waits until the given thread has terminated */ | 
					
						
							|  |  |  |   void join(thread_t tid); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |   /*! destroy handle of a thread */ | 
					
						
							|  |  |  |   void destroyThread(thread_t tid); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |   /*! type for handle to thread local storage */ | 
					
						
							|  |  |  |   typedef struct opaque_tls_t* tls_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! creates thread local storage */ | 
					
						
							|  |  |  |   tls_t createTls(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! set the thread local storage pointer */ | 
					
						
							|  |  |  |   void setTls(tls_t tls, void* const ptr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! return the thread local storage pointer */ | 
					
						
							|  |  |  |   void* getTls(tls_t tls); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*! destroys thread local storage identifier */ | 
					
						
							|  |  |  |   void destroyTls(tls_t tls); | 
					
						
							|  |  |  | } |