|
|
|
Задачка с несколькими потоками на свой класс семафоров
|
|||
|---|---|---|---|
|
#18+
Всем привет. У меня есть программа, которая запускает несколько потоков - читающих и пишущих. Когда работает писатель - другие писатели/читатели ожидают. Когда работает читатель/читатели - писатель ожидает. Мне нужно эту задачу реализовать с помощью своего класса семафор, не используя средства java для синхронизации. Вот что написал: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. Схема с читателями/писателями работает корректно, но программа периодически зависает. Семафор не атомарный и происходит зацикливание иногда. Как это с помощью семафора / других средств java(использующихся не для синхронизации) это можно реализовать? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 12:00 |
|
||
|
Задачка с несколькими потоками на свой класс семафоров
|
|||
|---|---|---|---|
|
#18+
mr_virtus, Прошу прощения, ввел в заблуждение. Все-таки нужно через такой семафор делать: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 12:47 |
|
||
|
Задачка с несколькими потоками на свой класс семафоров
|
|||
|---|---|---|---|
|
#18+
не используя средства java для синхронизации Хвастун... интересно что ты будешь использовать взамен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:58 |
|
||
|
Задачка с несколькими потоками на свой класс семафоров
|
|||
|---|---|---|---|
|
#18+
mayton, понял, что погорячился=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 16:33 |
|
||
|
Задачка с несколькими потоками на свой класс семафоров
|
|||
|---|---|---|---|
|
#18+
mr_virtus, http://google-styleguide.googlecode.com/svn/trunk/javaguide.html http://en.wikipedia.org/wiki/Volatile_variable#In_Java ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 16:43 |
|
||
|
Задачка с несколькими потоками на свой класс семафоров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо за ссылка. Не могли бы Вы пояснить. Не очень понял смысла: авторThis implies that every thread accessing a volatile field will read its current value before continuing, instead of (potentially) using a cached value. (However, there is no guarantee about the relative ordering of volatile reads and writes with regular reads and writes, meaning that it's generally not a useful threading construct.) (In Java 5 or later) Volatile reads and writes establish a happens-before relationship, much like acquiring and releasing a mutex То есть, если я использую семафор, методы которого не synchronized - программа подвисает. Например, Код: java 1. 2. 3. 4. 5. 6. 7. Два потока вылетеле после оператора value--; Будет зависание. А с volatile как? И что значит закешированное значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 09:06 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2127365]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 460ms |

| 0 / 0 |
