|
|
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
был на собеседовании. Попросили написать лок используя атомики. Я растерялся и затупил. Сейчас дома в спокойной обстановке написал: Код: 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. верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 12:08 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 13:46 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
redwhite90, как я понимаю тебе нужно проверить есть ли поток, который владеет замком (AtomicBoolean). Если такой поток есть (типа AtomicBoolean == true), то получить currentThread и сравнить с текущим. Если это это другой поток, то вызвать цикл while и ждать. Затем поместить в переменную currentThread текущий поток и выйти. unlock делать в finally блоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 13:53 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
rdm, авторто получить currentThread и сравнить с текущим это пять !!! Ну я не думаю, что надо закладываться на имплементацию ReentrantLock не похоже, что она на атомиках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 14:07 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
в моей то реализации есть косяки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 14:08 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
questioner, согласен))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 14:25 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
questioner, я говорил про Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 14:27 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
rdmquestioner, я говорил про Код: java 1. я пытаюсь решить у себя эту проблему при помощи ThreadLocal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 14:46 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
redwhite90, What if MyLock#lock() is invoked from 2+ threads? Which thread will lock it? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 00:49 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
dmitriyche, Кто успел, тот и съел. на 3 потоках проверял. Но многопоточность это не та тема, которую можно проверить просто запусками большого количества потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 13:47 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
на 10 потоках: Код: java 1. 2. 3. 4. 5. вывод: авторstart - Thread-0 finish - Thread-0 start - Thread-2 finish - Thread-2 start - Thread-7 finish - Thread-7 start - Thread-1 finish - Thread-1 start - Thread-3 finish - Thread-3 start - Thread-6 finish - Thread-6 start - Thread-9 finish - Thread-9 start - Thread-4 finish - Thread-4 start - Thread-8 finish - Thread-8 start - Thread-5 finish - Thread-5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 13:50 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
redwhite90, А что как один поток, попробует более одного раза захватить блокировку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 13:05 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, сказали, что Reentrant не обязательно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 22:02 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, да, конечно, в unlock надо написать Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 22:07 |
|
||
|
написать кастомнй лок на атомиках.
|
|||
|---|---|---|---|
|
#18+
redwhite90сказали, что Reentrant не обязательно IMHO "Reentrant не обязательно" - это отлуп по повтору, а не deadlock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 12:20 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39093219&tid=2124724]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 469ms |

| 0 / 0 |
