|
|
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
no56892questioner, ну, что, придумал как написать size()?)) так наверное: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 21:44 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
хотя cas операция тут как-то ни к селу ни к городу. обычный if можно написать. Меня чего-то терзают смутные сомнения в нужности cas в данном случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 22:09 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
questionerМеня чего-то терзают смутные сомнения в нужности cas в данном случае Забей. size() вполне может устареть к моменту возврата результата. Тут важно гарантировать, что цепочка не порвется или еще хуже -сама замкнется, пока по ней бегут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 23:14 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевquestionerМеня чего-то терзают смутные сомнения в нужности cas в данном случае Забей. size() вполне может устареть к моменту возврата результата. Тут важно гарантировать, что цепочка не порвется или еще хуже -сама замкнется, пока по ней бегут. Хм, тогда мой вариант совсем не будет работать. Тогда либо как-то(не знаю как) лочить коллекцию целиком на время исполнения метода, либо держать atomicLong который будет трекать pop/push. Но опять же данные могут быть слегка неконсистентные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 00:22 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
questioner, Реализация метода size() в SynchronizedCollection<E> : Код: java 1. 2. 3. P.S. SynchronizedCollection<E> - synchronized-обертка на обычной коллекцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 05:08 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Usman, В Synchronizedxxx все методы синхронизированы, поэтому и работать будет, а тут ведь просят для неблокирубщего алгоритма, тут скорее надо смотреть в сторону CHM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 09:25 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Usman, Но тогда можно пользоваться только синхро коллекцией. А в чем смысл? questioner, Но поскольку Entry не меняются после добавления в стек, даже при извлечении объекта из стека, то цепочка не разорвется. Даже если извлечения обгонят size(). И потому, что size() будет их удерживать их не соберет GC. Единственное но - при многопоточной работе, size() всегда имеет справочный характер и может устареть в любой момент, в т.ч. до возврата результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 09:25 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Хочешь задачку? Сделать аналогичный "стек", позволяющий вынуть как одно, так и два значения подряд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 09:27 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевUsman, Но тогда можно пользоваться только синхро коллекцией. А в чем смысл? questioner, Но поскольку Entry не меняются после добавления в стек, даже при извлечении объекта из стека, то цепочка не разорвется. Даже если извлечения обгонят size(). И потому, что size() будет их удерживать их не соберет GC. Единственное но - при многопоточной работе, size() всегда имеет справочный характер и может устареть в любой момент, в т.ч. до возврата результата. Кстати да, при таком подходе, объекты не будут удаляться из памяти. Memory leak. OutOfMemory может быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 09:33 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
questioner, Почему же? Всю цепочку держит голова. Как она спускается по цепочке - объект становится собираемым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 09:56 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевquestioner, Почему же? Всю цепочку держит голова. Как она спускается по цепочке - объект становится собираемым. Хм, действительно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 11:10 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
questioner Хм, действительно Ну что, пора уже к Art of Multiprocessor programming приступать?:) Эта книга сложная но must-read. Ну и упражнений там куча ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 11:15 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевХочешь задачку? Сделать аналогичный "стек", позволяющий вынуть как одно, так и два значения подряд. Как он должен себя если просят вынуть два значения, а есть только одно? в каком формате их выплёвывать? в массиве? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:03 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
questionerВ Synchronizedxxx все методы синхронизированы, поэтому и работать будет, а тут ведь просят для неблокирубщего алгоритмаСергей АрсеньевНо тогда можно пользоваться только синхро коллекцией. А в чем смысл?Ок. Можно завести одну переменную, которая и будет хранить общее кол-во элементов. Увеличивать при добавлении, уменьшать при удалении и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:12 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
UsmanОк. Можно завести одну переменную, которая и будет хранить общее кол-во элементов. Увеличивать при добавлении, уменьшать при удалении и т.д. http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1249068&msg=20190919 ..... либо держать atomicLong который будет трекать pop/push. Но опять же данные могут быть слегка неконсистентные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:46 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
questionerНо опять же данные могут быть слегка неконсистентные.это зависит от реализации pop/push ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:49 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
UsmanquestionerНо опять же данные могут быть слегка неконсистентные.это зависит от реализации pop/push Но в любом случае, если не запретить эти операции до запроса, результат может быть не актуальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 15:17 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевUsmanпропущено... это зависит от реализации pop/push Но в любом случае, если не запретить эти операции до запроса, результат может быть не актуальным.В отличии от чтения, запись всегда должна быть блокирующей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 15:22 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Usman, Мы про подсчет количества? Еще раз повторю - если не запретить изменения результат может быть не актуален чуть ранее чем известен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 15:30 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Поясните разницу между блокировкой и запретом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 15:37 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Usman, Синонимы. Я про то, что блокировку надо ставить тогда до начала size() и не отменять, пока результат не будет применен. А этого тут хотели бы избежать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 16:23 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевблокировку надо ставить тогда до начала size() и не отменять, пока результат не будет применен. А этого тут хотели бы избежать. :)Только в том случае, если подсчет елементов будет непосредственно внутри метода size(). Сергей Арсеньев, http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1249068&msg=20190919 atomicLong который будет трекать pop/pushА как на счет такого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 16:33 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
UsmanСергей Арсеньевблокировку надо ставить тогда до начала size() и не отменять, пока результат не будет применен. А этого тут хотели бы избежать. :)Только в том случае, если подсчет елементов будет непосредственно внутри метода size(). Сергей Арсеньев, http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1249068&msg=20190919 atomicLong который будет трекать pop/pushА как на счет такого? ну так мы сможем этот atomicLong инкрементить только уже после того, как compareAndSet сработал. и соответственно действие будет не атомарно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 17:13 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
questionerну так мы сможем этот atomicLong инкрементить только уже после того, как compareAndSet сработал. и соответственно действие будет не атомарноИсхожу из этого:UsmanВ отличии от чтения, запись всегда должна быть блокирующей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 17:24 |
|
||
|
codereview самописный потокобезопасный stack
|
|||
|---|---|---|---|
|
#18+
UsmanТолько в том случае, если подсчет елементов будет непосредственно внутри метода size(). Это не важно. В любой момент в том числе и в момент возврата из метода size() ситуация может измениться и число будет не актуально. И даже раньше. К тому моменту, как любой счетчик вернет значение, оно уже может устареть. Поэтому либо полная остановка изменяющих нитей, либо не актуальность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 18:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39400945&tid=2123165]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
94ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 437ms |

| 0 / 0 |
