mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  | * fthread.c | ||
|  | * | ||
|  | * pthread library interface to Fortran, for OSs supporting pthreads | ||
|  | * | ||
|  | * Adapted from code by V. Ganesh | ||
|  | */ | ||
|  | #include <stdio.h>
 | ||
|  | #include <pthread.h>
 | ||
|  | 
 | ||
|  | // Create a new fortran thread through a subroutine.
 | ||
|  | void fthread_create_(void *(*thread_func)(void *), pthread_t *theThread)  | ||
|  | { | ||
|  |   pthread_create(theThread, NULL, thread_func, NULL); | ||
|  | }  | ||
|  | 
 | ||
|  | /*
 | ||
|  | // Yield control to other threads
 | ||
|  | void fthread_yield_()  | ||
|  | { | ||
|  |   pthread_yield(); | ||
|  | } | ||
|  | */ | ||
|  | 
 | ||
|  | // Return my own thread ID
 | ||
|  | pthread_t fthread_self_()  | ||
|  | { | ||
|  |   return pthread_self(); | ||
|  | }  | ||
|  | 
 | ||
|  | // Lock the execution of all threads until we have the mutex
 | ||
|  | int fthread_mutex_lock_(pthread_mutex_t **theMutex)  | ||
|  | { | ||
|  |   return(pthread_mutex_lock(*theMutex)); | ||
|  | } | ||
|  | 
 | ||
|  | int fthread_mutex_trylock_(pthread_mutex_t **theMutex)  | ||
|  | { | ||
|  |   return(pthread_mutex_trylock(*theMutex)); | ||
|  | } | ||
|  | 
 | ||
|  | // Unlock the execution of all threads that were stopped by this mutex
 | ||
|  | void fthread_mutex_unlock_(pthread_mutex_t **theMutex)  | ||
|  | { | ||
|  |   pthread_mutex_unlock(*theMutex); | ||
|  | } | ||
|  | 
 | ||
|  | // Get a new mutex object
 | ||
|  | void fthread_mutex_init_(pthread_mutex_t **theMutex)  | ||
|  | { | ||
|  |   *theMutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); | ||
|  |   pthread_mutex_init(*theMutex, NULL); | ||
|  | } | ||
|  | 
 | ||
|  | // Release a mutex object
 | ||
|  | void fthread_mutex_destroy_(pthread_mutex_t **theMutex)  | ||
|  | { | ||
|  |   pthread_mutex_destroy(*theMutex); | ||
|  |   free(*theMutex); | ||
|  | } | ||
|  | 
 | ||
|  | // Waits for thread ID to join
 | ||
|  | void fthread_join(pthread_t *theThread)  | ||
|  | { | ||
|  |   int value = 0; | ||
|  |   pthread_join(*theThread, (void **)&value); | ||
|  | } | ||
|  | 
 | ||
|  | // Exit from a thread
 | ||
|  | void fthread_exit_(void *status)  | ||
|  | { | ||
|  |   pthread_exit(status); | ||
|  | } | ||
|  | 
 |