Transcript
  • 1. Split-ordered lists: lock-free extensible hash tables O.Shalev and N.Shavit. In Journal of the ACM, 53(3):379-405,NY,USA,2006, ACM Press

2. 3. DougLea

    • Java6 get ( ) java.util.ConcurrentHashMap

4. (?) 0 1 2 3 4 5 6 7 5. (?) 0, 3, 6 1, 4, 7 2, 5 0 1 2 3 4 5 6 7 6. 0, 3, 6 1, 4, 7 2, 5 0 1 2 3 4 5 6 7 7. 0 1 2 3 Hash(x) mod 4 == 0 Hash(x) mod 4 == 1 Hash(x) mod 4 == 2 Hash(x) mod 4 == 3 8. ) 1 Mod Mod 1 0 1 2 3 Hash(x) mod 8 == 0 Hash(x) mod 4 == 1 Hash(x) mod 4 == 2 Hash(x) mod 4 == 3 4 9. 0 1 2 3 Hash(x) mod 8 == 0 Hash(x) mod 8 == 1 or 5 Hash(x) mod 8 == 2 or 6 Hash(x) mod 8 == 3 or 7 4 Hash(x) mod 8 == 4 10. Mod 8 Mod 4 == 0 0 1 2 3 Hash(x) mod 8 == 0 Hash(x) mod 8 == 1 or 5 Hash(x) mod 8 == 2 or 6 Hash(x) mod 8 == 3 or 7 4 Hash(x) mod 8 == 4 11. Split-ordered Hashtable 12. Split-ordered list hash Sentinel Sentinel List LockfreeList iterator Sentinel 13. Sentinel Sentinel hash 1byte 0 1 2 3 00 80 40 c0 02 48 6d 7f 8a 74 00000010 01000000 00000001 10000000 00000011 11000000 14.

15. 16. 17. Sentinel 18. 19. Sentinel 0 1 2 3 00 80 40 c0 02 48 6d 7f 8a 74 69 20.

21. 22. 23. Sentinel 24. 25. Sentinel 0 1 2 3 00 80 40 c0 02 48 6d 7f 8a 74 69 26. Sentinel , 0 1 2 3 00 80 40 c0 02 48 6d 69 7f 8a 74 4 5 6 7 27. 0 1 2 3 00 80 40 c0 02 48 6d 69 7f 8a 74 4 5 6 7

28. Sentinel

Sentinel Sentinel 29. 30. 0 1 2 3 00 80 40 c0 02 48 6d 69 7f 8a 74 4 5 6 7 62

31. Sentinel

Sentinel Sentinel 32. 33. 0 1 2 3 00 80 40 c0 02 48 6d 69 7f 8a 74 4 5 6 7 62

34. Sentinel

Sentinel Sentinel 35. 36. 0 1 2 3 00 80 40 c0 02 48 6d 69 7f 8a 74 4 5 6 7 62

37. Sentinel

Sentinel Sentinel 38. 39. 0 1 2 3 00 80 40 c0 02 48 6d 69 7f 8a 74 4 5 6 7 62 60

40. Sentinel

Sentinel Sentinel 41. 42. 0 1 2 3 00 80 40 c0 02 48 6d 69 7f 8a 74 4 5 6 7 62 60

43. Sentinel

Sentinel Sentinel 44. 45. Lockfree Sentinel 0 1 2 3 00 80 40 c0 02 48 6d 7f 8a 74 46.

2 Sentinel 0 1 2 3 4 5 6 7 00 80 40 c0 02 48 6d 7f 8a 74 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 16 33 34 35 36 21 22 23 24 25 26 27 28 29 30 31 32 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 16 47. Java DougLea Hashmap C++ 64 Split-ordered list C++ 30-processor Sun Enterprise6000, a cache-coherent NUMA machine formed from 15 boards of two 300 MHz UltraSPARC II processors and 2 GB of RAM on each. a Suncc compiler 5.3, -xO5 and -xarch=v8plusa 48. DougLea 64 49. 50. 2

    • 3
    • 4
    • 5
  • DougLea 24

51. 44 52. 8 DougLea 53. 54. 55. 56. Split-ordered LockfreeList 8 DougLea


Recommended