home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 December / PCWKCD1296.iso / sharewar / quake106 / utils / light / threads.c < prev    next >
C/C++ Source or Header  |  1996-09-12  |  1KB  |  67 lines

  1.  
  2. #include "cmdlib.h"
  3. #include "threads.h"
  4.  
  5. #ifdef __alpha
  6. int        numthreads = 4;
  7. pthread_mutex_t    *my_mutex;
  8. #else
  9. int        numthreads = 1;
  10. #endif
  11.  
  12. void InitThreads (void)
  13. {
  14. #ifdef __alpha
  15.     pthread_mutexattr_t    mattrib;
  16.  
  17.     my_mutex = malloc (sizeof(*my_mutex));
  18.     if (pthread_mutexattr_create (&mattrib) == -1)
  19.         Error ("pthread_mutex_attr_create failed");
  20.     if (pthread_mutexattr_setkind_np (&mattrib, MUTEX_FAST_NP) == -1)
  21.         Error ("pthread_mutexattr_setkind_np failed");
  22.     if (pthread_mutex_init (my_mutex, mattrib) == -1)
  23.         Error ("pthread_mutex_init failed");
  24. #endif
  25. }
  26.  
  27. /*
  28. ===============
  29. RunThreadsOn
  30. ===============
  31. */
  32. void RunThreadsOn ( threadfunc_t func )
  33. {
  34. #ifdef __alpha
  35.     pthread_t    work_threads[256];
  36.     pthread_addr_t    status;
  37.     pthread_attr_t    attrib;
  38.     int        i;
  39.     
  40.     if (numthreads == 1)
  41.     {
  42.         func (NULL);
  43.         return;
  44.     }
  45.         
  46.     if (pthread_attr_create (&attrib) == -1)
  47.         Error ("pthread_attr_create failed");
  48.     if (pthread_attr_setstacksize (&attrib, 0x100000) == -1)
  49.         Error ("pthread_attr_setstacksize failed");
  50.     
  51.     for (i=0 ; i<numthreads ; i++)
  52.     {
  53.           if (pthread_create(&work_threads[i], attrib
  54.         , (pthread_startroutine_t)func, (pthread_addr_t)i) == -1)
  55.             Error ("pthread_create failed");
  56.     }
  57.         
  58.     for (i=0 ; i<numthreads ; i++)
  59.     {
  60.         if (pthread_join (work_threads[i], &status) == -1)
  61.             Error ("pthread_join failed");
  62.     }
  63. #else
  64.     func (NULL);
  65. #endif
  66. }
  67.