|
|
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли я правильно понял, его реализация - имеет ограничение на количество элементову него очередь растет с выделением памяти по мере заполняемости SOFT FOR YOUА я хочу без ограниченияну такое только на компах без ограничений памяти SOFT FOR YOUон там сильно заморочилсякаждый делающий lf через это проходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 16:40:03 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, На 1 процессорном атомики не будут отваливаться Разумеется, не будут. Потому, что в имитации вообще нет ни одного CASа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 16:43:52 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUkealon(Ruslan), А я тебе говорил, что это сравнение Value на nil. И стоят они там, где нужно проверить Value на nil :) вижу, что не доходит... пример Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. так работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 16:51:50 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)так работает? Так работает, даже лучше . По крайней мере повторить ошибку не смог :) Тебя здесь смущает наверное не Tail.Empty, а FHead.Value := Node И ты прав, это место достойно более пристального внимания. Но из-за счётчика в FHead, а не из-за сравнения Tail на nil В данном коде Tail играет роль не текущего хвоста, и хвоста, который был раньше Т.е. если раньше хвост был пустой (очередь пустая) - FHead тоже инициализируем только что добавленным узлом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 17:03:45 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUkealon(Ruslan)так работает? Так работает, даже лучше . По крайней мере повторить ошибку не смог :) Тебя здесь смущает наверное не Tail.Empty, а FHead.Value := Node И ты прав, это место достойно более пристального внимания. Но из-за счётчика в FHead, а не из-за сравнения Tail на nil В данном коде Tail играет роль не текущего хвоста, и хвоста, который был раньше Т.е. если раньше хвост был пустой (очередь пустая) - FHead тоже инициализируем только что добавленным узлом а ты тест нормальный сделай Код: pascal 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. всегда забитая очередь никому не нужна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 17:41:22 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Не очень понятно, что ты хотел показать этим тестом Ошибок найдено не было Ожидание потоков ты не делаешь Проверок ты не делаешь Возможно ты хотел указать на случай, когда Dequeue будет простаивать в ожидании инициализации Но точно такой же "Sleep" может возникнуть во время Dequeue и очередь будет долго расти в Tail В любом случае никакого отношения это к Empty не имеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 17:58:04 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUПроверок ты не делаешь хочешь сказать, что у тебя эксепшн не срабатывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 18:17:12 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Нет А у тебя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 18:29:44 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUkealon(Ruslan), Нет А у тебя?практически моментально i7-4710HQ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 18:33:31 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Выложи тест полностью и какая версия Delphi Потому что Dequeue не должен вернуть False Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Если выполнился Enqueue - то FTail не должен быть пустым Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 18:52:55 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, 20937473 - он весь и есть, модуль с репа твоего Delphi Xe 10.2 >>Потому что Dequeue не должен вернуть False это и проверяется, про эту ошибку я тебе уже писал - 20931687 ( - промежуточное состояние не должно блокировать объект, пользуйся только CAS ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 19:01:36 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Не, давай для чистоты эксперимента выкладывай все файлы Заодно народ у себя потестит Пока возникает ощущение, что ты в модулях как-то не то поправил :) И да Опиши модель на примере потоков A и B, как это могло произойти Ибо запись и чтение (GetEmpty) - сами по себе атомарные операции. Если память выровнена. А она должны быть выровнена ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 19:11:19 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUkealon(Ruslan), Не, давай для чистоты эксперимента выкладывай все файлы Заодно народ у себя потестит Пока возникает ощущение, что ты в модулях как-то не то поправил :) И да Опиши модель на примере потоков A и B, как это могло произойти Ибо запись и чтение (GetEmpty) - сами по себе атомарные операции. Если память выровнена. А она должны быть выровнена вот Фома неверующий некогда, нет у меня столько свободного времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 19:17:24 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
Ребята, потестируйте, пожалуйста, пример выше У меня Exception не воспроизводится (i3-6100U) Если воспроизведётся - давайте подумаем, почему kealon(Ruslan), А мой тест у тебя проходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 19:31:39 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, код не смотрел, но осуждаю. Чем докажешь, что операторы из кода в начале темы Tail.Next := Node; и Next := PNode(Head.Value).Next; обращаются по валидным адресам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 20:06:04 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUРебята, потестируйте, пожалуйста, пример выше У меня Exception не воспроизводится (i3-6100U) Если воспроизведётся - давайте подумаем, почему kealon(Ruslan), А мой тест у тебя проходит? Коллеги, какая Delphi нужна? на 2010 не собирается :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 20:14:21 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
Andy MezentsevКоллеги, какая Delphi нужна? на 2010 не собирается :( Delphi Xe 10.2 точно собирает SOFT FOR YOUРебята, потестируйте, пожалуйста, пример выше У меня Exception не воспроизводится (i3-6100U) Если воспроизведётся - давайте подумаем, почему kealon(Ruslan), А мой тест у тебя проходит? не прошёл на 4-й раз Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 20:21:49 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Очень хорошие вопросы Давай разбираться > Tail.Next := Node; Это стало быть Enqueue Единственное место, где могут получить доступ к этому узлу из другого потока - Dequeue Важной особенностью этого узла является то, что Next у этого узла всегда равен nil В Dequeue же анализируется Next узла Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. > Next := PNode(Head.Value).Next Это уже Dequeue На данный момент кто-то уже мог удалить элемент из очереди, и в Next будет содержаться мусор, вполне вероятно nil Однако, если Head уже невалидный, то FHead.AtomicCmpExchange(Next, Head) не пройдёт и цикл уйдёт на следующую итерацию Может быть возможен сценарий, когда в невалидном Head лежит ложный nil и это приводит к ошибке логики очереди? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 20:33:43 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
Andy Mezentsev, Я тестирую минимум на XE3 Может быть на первом заведётся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 20:34:31 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUОднако, если Head уже невалидный, то... дальше можно не продолжать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 20:45:55 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAndy Mezentsev, Я тестирую минимум на XE3 Может быть на первом заведётсяна XE2 уже не компилится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 20:52:28 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SOFT FOR YOUAndy Mezentsev, Я тестирую минимум на XE3 Может быть на первом заведётсяна XE2 уже не компилится Да, дженерики на Дельфях, и особенно старых компиляторах, оставляют желать лучшего. Их приходится допиливать наждаком с упоминанием какой-то матери :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 21:30:49 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovSOFT FOR YOUОднако, если Head уже невалидный, то... дальше можно не продолжать ) Ну а чего ты хотел :) Весь lock-free построен на том, что что-то валидно, а что-то уже нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 21:32:15 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНу а чего ты хотел :) Весь lock-free построен на том, что что-то валидно, а что-то уже нет не только весь lock-free, но еще и весь BrainMM ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 21:46:45 |
|
||
|
Lock-free: Доведём очередь до ума
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUkealon(Ruslan)пропущено... на XE2 уже не компилится Да, дженерики на Дельфях, и особенно старых компиляторах, оставляют желать лучшего. Их приходится допиливать наждаком с упоминанием какой-то матери :) дженерики зло. попробуй сделать так, чтобы они не понадобились ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 21:47:58 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39549796&tid=2041445]: |
0ms |
get settings: |
15ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 368ms |

| 0 / 0 |
