athread.cc
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:2k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.    File: athread.hh
  3.    
  4.    By: Alex Theo de Jong
  5.    Created: March, 1996
  6.    
  7.    Description:
  8.    Alex' Threads based on pthreads
  9. */
  10. #include "athread.hh"
  11. int Errors::errcount=0;
  12. #ifndef SOLARIS_PTHREAD
  13. #endif // SOLARIS_PTHREAD
  14. #ifdef SOLARIS
  15. #endif // SOLARIS
  16. #ifndef IRIX_PTHREAD
  17. #endif // IRIX_PTHREAD
  18. #ifdef IRIX
  19. #include <sys/types.h>
  20. #include <sys/stat.h>
  21. #include <unistd.h>
  22. #include <string.h>
  23. // create shared arena space
  24. SharedArena SA::_sa;
  25.  
  26. SharedArena::SharedArena(){
  27.   timeval tv;
  28.   if (gettimeofday(&tv, 0)!=0){
  29.     cerr << "could not get timeofday to create shared memory spacen";
  30.     exit(1);
  31.   }
  32.   sprintf(filename, "/tmp/%d", (int) tv.tv_sec);
  33.   if (!(handle=usinit(filename))){
  34.     cerr << "could not create shared memory space on `" << filename << "'n";
  35.     exit(1);
  36.   }
  37.   chmod(filename, S_IRUSR |  S_IWUSR | S_IRGRP |  S_IWGRP | S_IROTH |  S_IWOTH);
  38. }
  39. SharedArena::~SharedArena(){
  40.   usdetach(handle); 
  41.   //  char command[100];
  42.   //  sprintf(command, "rm -f %s", filename);
  43.   //  system(command);  // remove tmp file
  44.   unlink(filename);
  45. }
  46. void* (*_Thread_library::function_call)(void*)=0;
  47. usema_t* _Thread_library::funct_sema=0;
  48. ulock_t _Thread_library::mlock=0;
  49. athr_t** _Thread_library::_thread_list=(athr_t**) new (athr_t*)[_thread_list_max];
  50. int _Thread_library::init(){
  51.   funct_sema=usnewsema(_sa.handle, 1);
  52.   if (usinitsema(funct_sema, 1)<0) return -1;
  53.   mlock=usnewlock(_sa.handle);
  54.   if (usinitlock(mlock)<0) return -1;
  55.   for (int i=0; i<_thread_list_max; i++) _thread_list[i]=0;
  56.   return 1;
  57. }
  58. static int _Thread_library=_Thread_library::init();
  59. #endif // IRIX