NOTES
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. Here are some notes on the internals of the implementation.
  2. LIBC routines.
  3. Unfortuanately many of the libc routine return a pointer to static data.
  4. There are two methods to deal with this. One write a new routine where the
  5. arguments are different, and have one argument be a pointer to some space
  6. to store the data, or two use thread specific data and warn the user that
  7. data isn't valid if the calling thread is terminated.
  8. INTERNAL LOCKING
  9. To prevent deadlocks the following rules were used for locks.
  10. 1. Local locks for mutex queues and other like things are only locked
  11. by running threads, at NO time will a local lock be held by
  12. a thread in a non running state.
  13. 2.  Only threads that are in a run state can attempt to lock another thread,
  14. this way, we can assume that the lock will be released shortly, and don't
  15. have to unlock the local lock.
  16. 3. The only time a thread will have a pthread->lock and is not in a run
  17. state is when it is in the reschedule routine.
  18. 4. The reschedule routine assumes all local locks have been released,
  19. there is a lock on the currently running thread (pthread_run),
  20. and that this thread is being rescheduled to a non running state.
  21. It is safe to unlock the currently running threads lock after it
  22. has been rescheduled.
  23. 5. The reschedule routine locks the kernel, sets the state of the currently
  24. running thread, unlocks the currently running thread, calls the
  25. context switch routines.
  26. 6 the kernel lock is used only ...
  27. 7. The order of locking is ...
  28. 1 local locks
  29. 2 pthread->lock /* Assumes it will get it soon */
  30. 3 pthread_run->lock /* Assumes it will get it soon, but must release 2 */
  31. 4 kernel lock /* Currently assumes it will ALWAYS get it. */
  32. 8. The kernel lock will be changed to a spin lock for systems that
  33. already support kernel threads, this way we can mutiplex threads onto
  34. kernel threads.
  35. 9. There are points where the kernel is locked and it needs to get
  36. either a local lock or a pthread lock, if at these points the code
  37. fails to get the lock the kernel gives up and sets a flag which will
  38. be checked at a later point.
  39. 10. Interrupts are dissabled while the kernel is locked, the interrupt
  40. mask must be checked afterwards or cleared in some way, after interrputs
  41. have been reenabled, this allows back to back interrupts, but should always
  42. avoid missing one.
  43. ------------------------------------------------------------------------------
  44. Copyright (c) 1994 Chris Provenzano. All rights reserved.
  45. This product includes software developed by the Univeristy of California,
  46. Berkeley and its contributors.
  47. For further licencing and distribution restrictions see the file COPYRIGHT
  48. included in this directory.