/src/kilim/ReentrantLock.java

http://github.com/kilim/kilim · Java · 92 lines · 77 code · 13 blank · 2 comment · 18 complexity · 6d16cd5a59ff0d1b46ddf290fc14eca7 MD5 · raw file

  1. // copyright 2006 sriram - offered under the terms of the MIT License
  2. package kilim;
  3. import java.util.concurrent.TimeUnit;
  4. public class ReentrantLock extends java.util.concurrent.locks.ReentrantLock {
  5. private static final long serialVersionUID = 1L;
  6. public ReentrantLock() {
  7. super(false);
  8. }
  9. public ReentrantLock(boolean fair) {
  10. super(fair);
  11. }
  12. public Thread getOwner() {
  13. return super.getOwner();
  14. }
  15. Thread locker = null; // /***************************
  16. public void preLock() throws Pausable {
  17. Scheduler.getCurrentTask().prePin();
  18. }
  19. protected void checkPin() {
  20. Scheduler.getCurrentTask().checkPin();
  21. }
  22. @Override
  23. public void lock() {
  24. checkPin();
  25. super.lock();
  26. Thread t = Thread.currentThread();
  27. locker = t;
  28. if (t != null) {
  29. Task tsk = Scheduler.getCurrentTask();
  30. if (tsk != null)
  31. tsk.pinToThread();
  32. }
  33. }
  34. @Override
  35. public boolean tryLock() {
  36. checkPin();
  37. // TODO Auto-generated method stub
  38. boolean ret = super.tryLock();
  39. Thread t = Thread.currentThread();
  40. if (ret && (t != null)) {
  41. locker = t;
  42. Task tsk = Scheduler.getCurrentTask();
  43. if (tsk != null)
  44. tsk.pinToThread();
  45. }
  46. return ret;
  47. }
  48. @Override
  49. public boolean tryLock(long timeout, TimeUnit unit)
  50. throws InterruptedException {
  51. checkPin();
  52. boolean ret = super.tryLock(timeout, unit);
  53. Thread t = Thread.currentThread();
  54. if (ret && (t != null)) {
  55. locker = t;
  56. Task tsk = Scheduler.getCurrentTask();
  57. if (tsk != null)
  58. tsk.pinToThread();
  59. }
  60. return ret;
  61. }
  62. @Override
  63. public void unlock() {
  64. try {
  65. super.unlock();
  66. } catch (IllegalMonitorStateException ims) {
  67. System.err.println("Locking thread: " + locker.getName()
  68. + ", unlocking thread: " + Thread.currentThread().getName());
  69. ims.printStackTrace();
  70. System.exit(1);
  71. }
  72. Thread t = Thread.currentThread();
  73. if (t != null) {
  74. Task tsk = Scheduler.getCurrentTask();
  75. if (tsk != null)
  76. tsk.unpinFromThread();
  77. }
  78. }
  79. }