1817 lines
96 KiB
Clojure
1817 lines
96 KiB
Clojure
{:highlights [{:id #uuid "6433ca28-1bdf-433d-8ed9-0d54bf5ba940",
|
||
:page 311,
|
||
:position {:bounding {:x1 199.265625,
|
||
:y1 543.921875,
|
||
:x2 243.2843017578125,
|
||
:y2 563.921875,
|
||
:width 719.9999999999999,
|
||
:height 1080},
|
||
:rects ({:x1 199.265625,
|
||
:y1 543.921875,
|
||
:x2 243.2843017578125,
|
||
:y2 563.921875,
|
||
:width 719.9999999999999,
|
||
:height 1080}),
|
||
:page 311},
|
||
:content {:text "thread"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433cb56-fbef-46da-83c2-13fa2dba2967",
|
||
:page 311,
|
||
:position {:bounding {:x1 577.609375,
|
||
:y1 1234.609375,
|
||
:x2 804.0300903320312,
|
||
:y2 1264.609375,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6},
|
||
:rects ({:x1 577.609375,
|
||
:y1 1234.609375,
|
||
:x2 804.0300903320312,
|
||
:y2 1264.609375,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6}),
|
||
:page 311},
|
||
:content {:text "thread control blocks"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433cb70-d168-4863-8268-1e969df6ce06",
|
||
:page 311,
|
||
:position {:bounding {:x1 274.29595947265625,
|
||
:y1 1133.640625,
|
||
:x2 422.473388671875,
|
||
:y2 1163.640625,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6},
|
||
:rects ({:x1 274.296875,
|
||
:y1 1133.640625,
|
||
:x2 422.473388671875,
|
||
:y2 1163.640625,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6}
|
||
{:x1 274.29595947265625,
|
||
:y1 1135.125,
|
||
:x2 274.3037109375,
|
||
:y2 1158.125,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6}),
|
||
:page 311},
|
||
:content {:text "context switch"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433cba2-61bd-4549-a29f-2ad85b3e30cd",
|
||
:page 312,
|
||
:position {:bounding {:x1 480.51898193359375,
|
||
:y1 1039.890625,
|
||
:x2 683.934814453125,
|
||
:y2 1069.890625,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6},
|
||
:rects ({:x1 480.53125,
|
||
:y1 1039.890625,
|
||
:x2 610.921875,
|
||
:y2 1069.890625,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6}
|
||
{:x1 480.51898193359375,
|
||
:y1 1041.375,
|
||
:x2 683.934814453125,
|
||
:y2 1064.375,
|
||
:width 1094.3999999999999,
|
||
:height 1641.6}),
|
||
:page 312},
|
||
:content {:text "thread-local storage,"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433e4cc-69e4-4057-8cc6-1766240d82f4",
|
||
:page 320,
|
||
:position {:bounding {:x1 554.1071472167969,
|
||
:y1 682.4375152587891,
|
||
:x2 670.6859741210938,
|
||
:y2 705.8660888671875,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 554.1071472167969,
|
||
:y1 682.4375152587891,
|
||
:x2 670.6859741210938,
|
||
:y2 705.8660888671875,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 320},
|
||
:content {:text "race condition"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433e52b-1f38-4f7c-b168-0aed624f9bdf",
|
||
:page 320,
|
||
:position {:bounding {:x1 0,
|
||
:y1 509.14286518096924,
|
||
:x2 746.7916259765625,
|
||
:y2 922.9732360839844,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 509.14286518096924,
|
||
:x2 0,
|
||
:y2 530.2857236862183,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 525.142865896225,
|
||
:x2 0,
|
||
:y2 546.285724401474,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 515.8003540039062,
|
||
:y1 865.4107360839844,
|
||
:x2 746.7916259765625,
|
||
:y2 883.1250305175781,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286041259766,
|
||
:y1 885.3303833007812,
|
||
:x2 745.5325088500977,
|
||
:y2 903.2589416503906,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286041259766,
|
||
:y1 905.2589416503906,
|
||
:x2 682.6857986450195,
|
||
:y2 922.9732360839844,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 320},
|
||
:content {:text "A critical section is a piece of code that accesses a shared variable (or more generally, a shared resource) and must not be concurrently executed by more than one thread."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433e566-e6ef-45b3-84b1-eba981be914a",
|
||
:page 320,
|
||
:position {:bounding {:x1 0,
|
||
:y1 557.1428680419922,
|
||
:x2 752.232177734375,
|
||
:y2 984.7500305175781,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 557.1428680419922,
|
||
:x2 0,
|
||
:y2 578.2857246398926,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 573.1428680419922,
|
||
:x2 0,
|
||
:y2 594.2857284545898,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 601.2857360839844,
|
||
:y1 925.5268249511719,
|
||
:x2 743.2662353515625,
|
||
:y2 948.9553833007812,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 743.2589721679688,
|
||
:y1 927.1875305175781,
|
||
:x2 752.232177734375,
|
||
:y2 945.1160888671875,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286041259766,
|
||
:y1 947.107177734375,
|
||
:x2 745.5417861938477,
|
||
:y2 965.0357360839844,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286041259766,
|
||
:y1 967.0357360839844,
|
||
:x2 576.7512893676758,
|
||
:y2 984.7500305175781,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 320},
|
||
:content {:text "mutual exclusion. This property guarantees that if one thread is executing within the critical section, the others will be prevented from doing so."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433e6a1-407c-4936-b184-dee868ef4107",
|
||
:page 321,
|
||
:position {:bounding {:x1 423.9821548461914,
|
||
:y1 850.3928833007812,
|
||
:x2 509.6704788208008,
|
||
:y2 873.8214721679688,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 423.9821548461914,
|
||
:y1 850.3928833007812,
|
||
:x2 509.6704788208008,
|
||
:y2 873.8214721679688,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 321},
|
||
:content {:text "atomically"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433e6e7-d995-4b69-96b3-261b79f94c1d",
|
||
:page 322,
|
||
:position {:bounding {:x1 715.2017593383789,
|
||
:y1 262.08929443359375,
|
||
:x2 746.7634048461914,
|
||
:y2 279.8035888671875,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 715.2017593383789,
|
||
:y1 262.08929443359375,
|
||
:x2 746.7634048461914,
|
||
:y2 279.8035888671875,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 322},
|
||
:content {:text "sane"},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "6433e729-7043-453b-8d60-6e6c41560543",
|
||
:page 322,
|
||
:position {:bounding {:x1 0,
|
||
:y1 125.14286422729492,
|
||
:x2 747.738899230957,
|
||
:y2 366.5625114440918,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 125.14286422729492,
|
||
:x2 0,
|
||
:y2 146.28571701049805,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 712.866096496582,
|
||
:y1 323.2053642272949,
|
||
:x2 747.738899230957,
|
||
:y2 346.6339530944824,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.90179443359375,
|
||
:y1 343.1339530944824,
|
||
:x2 366.5299377441406,
|
||
:y2 366.5625114440918,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 322},
|
||
:content {:text "synchronization primitives"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433eabf-48d6-4776-b66f-a5f7804d1ddc",
|
||
:page 323,
|
||
:position {:bounding {:x1 320.0720024108887,
|
||
:y1 195.0178680419922,
|
||
:x2 547.6788444519043,
|
||
:y2 212.94644165039062,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 320.0720024108887,
|
||
:y1 195.0178680419922,
|
||
:x2 547.6788444519043,
|
||
:y2 212.94644165039062,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 323},
|
||
:content {:text " KEY CONCURRENCY TERMS"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433f35b-403b-4b25-b9f9-076e9e34777e",
|
||
:page 327,
|
||
:position {:bounding {:x1 585.9527893066406,
|
||
:y1 368.6517906188965,
|
||
:x2 738.0721740722656,
|
||
:y2 409.2232322692871,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 585.9527893066406,
|
||
:y1 368.6517906188965,
|
||
:x2 738.0721740722656,
|
||
:y2 409.2232322692871,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 327},
|
||
:content {:text "Thread API"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433f45b-0345-4790-8379-3d1a94e57ef5",
|
||
:page 339,
|
||
:position {:bounding {:x1 617.5714492797852,
|
||
:y1 347.3571548461914,
|
||
:x2 691.9386367797852,
|
||
:y2 385.0714416503906,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 617.5714492797852,
|
||
:y1 347.3571548461914,
|
||
:x2 691.9386367797852,
|
||
:y2 385.0714416503906,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 339},
|
||
:content {:text "Locks"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433f4ba-f2e4-4743-a536-e2b7747433b7",
|
||
:page 339,
|
||
:position {:bounding {:x1 140.0178680419922,
|
||
:y1 979.4018249511719,
|
||
:x2 325.5472869873047,
|
||
:y2 997.1161193847656,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 140.0178680419922,
|
||
:y1 979.4018249511719,
|
||
:x2 325.5472869873047,
|
||
:y2 997.1161193847656,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 339},
|
||
:content {:text "A lock is just a variabl"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433f5e6-bc06-42a9-866e-e9a3053f528f",
|
||
:page 340,
|
||
:position {:bounding {:x1 0,
|
||
:y1 349.1428680419922,
|
||
:x2 745.5471057891846,
|
||
:y2 658.3750305175781,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 349.1428680419922,
|
||
:x2 0,
|
||
:y2 370.2857360839844,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 365.1428680419922,
|
||
:x2 0,
|
||
:y2 386.2857360839844,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 706.2289886474609,
|
||
:y1 600.8125305175781,
|
||
:x2 745.5282440185547,
|
||
:y2 618.5268249511719,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286994934082,
|
||
:y1 620.732177734375,
|
||
:x2 745.5471057891846,
|
||
:y2 638.6607360839844,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286994934082,
|
||
:y1 640.6607360839844,
|
||
:x2 318.0395984649658,
|
||
:y2 658.3750305175781,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 340},
|
||
:content {:text "locks help transform the chaos that is traditional OS scheduling into a more controlled activity."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433fb69-1425-46b4-996f-f91da5d3e8d0",
|
||
:page 341,
|
||
:position {:bounding {:x1 452.08409881591797,
|
||
:y1 710.0000305175781,
|
||
:x2 525.8427047729492,
|
||
:y2 727.7143249511719,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 452.08409881591797,
|
||
:y1 710.0000305175781,
|
||
:x2 525.8427047729492,
|
||
:y2 727.7143249511719,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 341},
|
||
:content {:text "efficacy "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "6433fbfd-a1bf-4fd9-a54d-e15189c77b15",
|
||
:page 342,
|
||
:position {:bounding {:x1 171.88867950439453,
|
||
:y1 179.01788330078125,
|
||
:x2 385.91197204589844,
|
||
:y2 200.732177734375,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 171.88867950439453,
|
||
:y1 179.01788330078125,
|
||
:x2 385.91197204589844,
|
||
:y2 200.732177734375,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 342},
|
||
:content {:text "Controlling Interrupts"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433fe7e-2221-41ee-ad6b-7deaa4459aa5",
|
||
:page 343,
|
||
:position {:bounding {:x1 116.09821701049805,
|
||
:y1 691.2232360839844,
|
||
:x2 532.493236541748,
|
||
:y2 712.9375305175781,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 116.09821701049805,
|
||
:y1 691.2232360839844,
|
||
:x2 532.493236541748,
|
||
:y2 712.9375305175781,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 343},
|
||
:content {:text "A Failed Attempt: Just Using Loads/Stores"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6433ff4a-856d-4e4b-af30-6cb600aefeb5",
|
||
:page 343,
|
||
:position {:bounding {:x1 0,
|
||
:y1 509.1428680419922,
|
||
:x2 690.1883277893066,
|
||
:y2 893.2232666015625,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 509.1428680419922,
|
||
:x2 0,
|
||
:y2 530.2857208251953,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 594.5398139953613,
|
||
:y1 855.3660888671875,
|
||
:x2 689.8509101867676,
|
||
:y2 873.0803833007812,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09821701049805,
|
||
:y1 875.294677734375,
|
||
:x2 690.1883277893066,
|
||
:y2 893.2232666015625,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 343},
|
||
:content {:text " use a simple variable (flag) to indicate whether some thread has possession of a lock."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64340154-807c-4a7a-b783-045d5d6d3927",
|
||
:page 344,
|
||
:position {:bounding {:x1 347.09178161621094,
|
||
:y1 733.5803985595703,
|
||
:x2 635.6820526123047,
|
||
:y2 755.294677734375,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 347.09178161621094,
|
||
:y1 733.5803985595703,
|
||
:x2 635.6820526123047,
|
||
:y2 755.294677734375,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 344},
|
||
:content {:text "Spin Locks with Test-And-Set"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643401e0-fcec-41d3-9898-d5c4175ac464",
|
||
:page 344,
|
||
:position {:bounding {:x1 171.89287185668945,
|
||
:y1 903.1607666015625,
|
||
:x2 544.1298828125,
|
||
:y2 927.9286193847656,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 435.919677734375,
|
||
:y1 903.1607666015625,
|
||
:x2 441.9018249511719,
|
||
:y2 915.1607666015625,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89287185668945,
|
||
:y1 904.5000610351562,
|
||
:x2 271.8574905395508,
|
||
:y2 927.9286193847656,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 300.0535888671875,
|
||
:y1 904.5000610351562,
|
||
:x2 435.9386901855469,
|
||
:y2 927.9286193847656,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 266.50001525878906,
|
||
:y1 907.357177734375,
|
||
:x2 544.1298828125,
|
||
:y2 925.2857666015625,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 344},
|
||
:content {:text "test-and-set (or atomic exchange1) instruction"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6434edd3-2a7b-4e11-af18-29854e628bc6",
|
||
:page 345,
|
||
:position {:bounding {:x1 491.1250305175781,
|
||
:y1 377.0089416503906,
|
||
:x2 658.8576049804688,
|
||
:y2 400.4375305175781,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 491.1250305175781,
|
||
:y1 377.0089416503906,
|
||
:x2 658.8576049804688,
|
||
:y2 400.4375305175781,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 345},
|
||
:content {:text "Peterson’s algorithm"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6434f523-44b7-40ab-8fea-528969c5acfd",
|
||
:page 347,
|
||
:position {:bounding {:x1 402.9370536804199,
|
||
:y1 274.72320556640625,
|
||
:x2 440.68061447143555,
|
||
:y2 292.4375,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 402.9370536804199,
|
||
:y1 274.72320556640625,
|
||
:x2 440.68061447143555,
|
||
:y2 292.4375,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 347},
|
||
:content {:text "foil "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "6434f8ac-d762-40a4-abb0-2955c2c8b396",
|
||
:page 348,
|
||
:position {:bounding {:x1 203.03572463989258,
|
||
:y1 550.3303833007812,
|
||
:x2 358.456729888916,
|
||
:y2 573.7589569091797,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 203.03572463989258,
|
||
:y1 550.3303833007812,
|
||
:x2 358.456729888916,
|
||
:y2 573.7589569091797,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 348},
|
||
:content {:text "compare-and-swap"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6434fab0-08de-4f28-8d8e-f48f7e04aaaa",
|
||
:page 348,
|
||
:position {:bounding {:x1 0,
|
||
:y1 301.1428756713867,
|
||
:x2 746.9776916503906,
|
||
:y2 669.5536117553711,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 301.1428756713867,
|
||
:x2 0,
|
||
:y2 322.28572845458984,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 317.1428756713867,
|
||
:x2 0,
|
||
:y2 338.28572845458984,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 528.7957763671875,
|
||
:y1 611.7679061889648,
|
||
:x2 745.6440734863281,
|
||
:y2 629.4822006225586,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286422729492,
|
||
:y1 631.6964340209961,
|
||
:x2 746.9776916503906,
|
||
:y2 649.6250228881836,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286422729492,
|
||
:y1 651.6250228881836,
|
||
:x2 731.2063903808594,
|
||
:y2 669.5536117553711,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 348},
|
||
:content {:text "est whether the value at the address specified by ptr is equal to expected; if so, update the memory location pointed to by ptr with the new value. If not, do nothing. "},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6434fb8c-2b3b-4d80-83fb-3b34da4dcd28",
|
||
:page 349,
|
||
:position {:bounding {:x1 333.7612075805664,
|
||
:y1 182.38393259048462,
|
||
:x2 382.13965606689453,
|
||
:y2 200.09822702407837,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 333.7612075805664,
|
||
:y1 182.38393259048462,
|
||
:x2 382.13965606689453,
|
||
:y2 200.09822702407837,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 349},
|
||
:content {:text "delve "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "6434fde1-9d19-4381-805e-f2a972875dc2",
|
||
:page 349,
|
||
:position {:bounding {:x1 140.9732208251953,
|
||
:y1 353.53572845458984,
|
||
:x2 417.0097427368164,
|
||
:y2 376.9642868041992,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 144.50000762939453,
|
||
:y1 353.53572845458984,
|
||
:x2 245.45536041259766,
|
||
:y2 376.9642868041992,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 277.5178756713867,
|
||
:y1 353.53572845458984,
|
||
:x2 417.0097427368164,
|
||
:y2 376.9642868041992,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 140.9732208251953,
|
||
:y1 355.1964340209961,
|
||
:x2 417.0097427368164,
|
||
:y2 373.1250228881836,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 349},
|
||
:content {:text " load-linked and store-conditional"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6434fe1c-47f3-422c-a317-be72f08d6aef",
|
||
:page 349,
|
||
:position {:bounding {:x1 0,
|
||
:y1 173.14286613464355,
|
||
:x2 689.8495903015137,
|
||
:y2 474.5625305175781,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 173.14286613464355,
|
||
:x2 0,
|
||
:y2 194.28572463989258,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 140.01786422729492,
|
||
:y1 436.919677734375,
|
||
:x2 689.8495903015137,
|
||
:y2 454.6339416503906,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09821891784668,
|
||
:y1 456.8482360839844,
|
||
:x2 576.551923751831,
|
||
:y2 474.5625305175781,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 349},
|
||
:content {:text "The load-linked operates much like a typical load instruction, and simply fetches a value from memory and places it in a register. "},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6434fe62-0e92-4414-86cc-b0c37fcf51ec",
|
||
:page 349,
|
||
:position {:bounding {:x1 0,
|
||
:y1 205.1428680419922,
|
||
:x2 691.6227188110352,
|
||
:y2 574.4018249511719,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 205.1428680419922,
|
||
:x2 0,
|
||
:y2 226.28572845458984,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 221.1428680419922,
|
||
:x2 0,
|
||
:y2 242.28572845458984,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 237.1428680419922,
|
||
:x2 0,
|
||
:y2 258.28572845458984,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 253.1428680419922,
|
||
:x2 0,
|
||
:y2 274.28572845458984,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 277.6942825317383,
|
||
:y1 476.76788330078125,
|
||
:x2 689.7750625610352,
|
||
:y2 494.482177734375,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09821891784668,
|
||
:y1 496.6964416503906,
|
||
:x2 689.7808971405029,
|
||
:y2 514.6250305175781,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09821891784668,
|
||
:y1 516.6250305175781,
|
||
:x2 690.9502334594727,
|
||
:y2 534.5535888671875,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09821891784668,
|
||
:y1 536.5535888671875,
|
||
:x2 691.6227188110352,
|
||
:y2 554.482177734375,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09821891784668,
|
||
:y1 556.4732360839844,
|
||
:x2 505.1802444458008,
|
||
:y2 574.4018249511719,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 349},
|
||
:content {:text "store-conditional, which only succeeds (and updates the value stored at the address just load-linked from) if no intervening store to the address has taken place. In the case of success, the storeconditional returns 1 and updates the value at ptr to value; if it fails, the value at ptr is not updated and 0 is returned."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64350170-c853-4080-9ed1-2777ea3a18c8",
|
||
:page 350,
|
||
:position {:bounding {:x1 171.88932037353516,
|
||
:y1 863.3928833007812,
|
||
:x2 325.20848846435547,
|
||
:y2 885.1071624755859,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 171.88932037353516,
|
||
:y1 863.3928833007812,
|
||
:x2 325.20848846435547,
|
||
:y2 885.1071624755859,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 350},
|
||
:content {:text "Fetch-And-Add"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643501c1-f11b-4e85-8125-d2a5a31f69b0",
|
||
:page 351,
|
||
:position {:bounding {:x1 287.3301315307617,
|
||
:y1 215.3393006324768,
|
||
:x2 330.14022064208984,
|
||
:y2 233.0535798072815,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 287.3301315307617,
|
||
:y1 215.3393006324768,
|
||
:x2 330.14022064208984,
|
||
:y2 233.0535798072815,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 351},
|
||
:content {:text "brag "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "64350331-8fbb-4c41-9ac1-1a4ba852f772",
|
||
:page 351,
|
||
:position {:bounding {:x1 116.09821701049805,
|
||
:y1 483.9285888671875,
|
||
:x2 203.6010856628418,
|
||
:y2 507.3571472167969,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 116.09821701049805,
|
||
:y1 483.9285888671875,
|
||
:x2 203.6010856628418,
|
||
:y2 507.3571472167969,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 351},
|
||
:content {:text "ticket lock"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64350420-ca8a-4cac-af2f-f4e7deb5d1be",
|
||
:page 351,
|
||
:position {:bounding {:x1 0,
|
||
:y1 413.1428680419922,
|
||
:x2 738.2561340332031,
|
||
:y2 816.4464416503906,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 0,
|
||
:y1 413.1428680419922,
|
||
:x2 0,
|
||
:y2 434.2857208251953,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 204.68063354492188,
|
||
:y1 775.7679138183594,
|
||
:x2 738.2561340332031,
|
||
:y2 795.1964416503906,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 123.83928871154785,
|
||
:y1 797.0179138183594,
|
||
:x2 618.5764713287354,
|
||
:y2 816.4464416503906,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 351},
|
||
:content {:text "it ensures progress for all threads. Once a thread is assigned its ticket value, it will be scheduled at some point in the future"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64350781-6995-41db-8b8e-2de0eb84136a",
|
||
:page 353,
|
||
:position {:bounding {:x1 336.0178756713867,
|
||
:y1 439.3214416503906,
|
||
:x2 629.7097702026367,
|
||
:y2 464.46429443359375,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 336.0178756713867,
|
||
:y1 439.3214416503906,
|
||
:x2 629.7097702026367,
|
||
:y2 464.46429443359375,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 353},
|
||
:content {:text "Lock With Test-and-set And Yield"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643507af-1153-46c1-b232-31a9a203e5df",
|
||
:page 353,
|
||
:position {:bounding {:x1 0,
|
||
:y1 269.1428756713867,
|
||
:x2 738.272834777832,
|
||
:y2 606.2500381469727,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 0,
|
||
:y1 269.1428756713867,
|
||
:x2 0,
|
||
:y2 290.28572845458984,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 0,
|
||
:y1 285.1428756713867,
|
||
:x2 0,
|
||
:y2 306.28572845458984,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 233.25476837158203,
|
||
:y1 544.3125381469727,
|
||
:x2 738.272834777832,
|
||
:y2 563.741096496582,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 123.83929443359375,
|
||
:y1 563.9821853637695,
|
||
:x2 202.37335205078125,
|
||
:y2 589.1250381469727,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 306.8750228881836,
|
||
:y1 563.9821853637695,
|
||
:x2 363.09754180908203,
|
||
:y2 589.1250381469727,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 123.83929443359375,
|
||
:y1 567.4107437133789,
|
||
:x2 738.1959915161133,
|
||
:y2 586.8393020629883,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 123.83929443359375,
|
||
:y1 586.8214492797852,
|
||
:x2 199.30642700195312,
|
||
:y2 606.2500381469727,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 353},
|
||
:content {:text "yield is simply a system call that moves the caller from the running state to the ready state, and thus promotes another thread to running. "},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6435099b-0834-483e-9ef2-98a0b795cf00",
|
||
:page 355,
|
||
:position {:bounding {:x1 381.2857208251953,
|
||
:y1 336.4643096923828,
|
||
:x2 535.9663848876953,
|
||
:y2 361.6071319580078,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 381.2857208251953,
|
||
:y1 336.4643096923828,
|
||
:x2 535.9663848876953,
|
||
:y2 361.6071319580078,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 355},
|
||
:content {:text "priority inversion"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643509b5-12a0-4ed9-8a96-f70b3fc0e373",
|
||
:page 355,
|
||
:position {:bounding {:x1 149.39746856689453,
|
||
:y1 359.30358123779297,
|
||
:x2 268.7185363769531,
|
||
:y2 378.73217010498047,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 149.39746856689453,
|
||
:y1 359.30358123779297,
|
||
:x2 268.7185363769531,
|
||
:y2 378.73217010498047,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 355},
|
||
:content {:text "intergalactic "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "643509ba-662e-4d0a-906a-fd0987e24574",
|
||
:page 355,
|
||
:position {:bounding {:x1 268.71058654785156,
|
||
:y1 359.30358123779297,
|
||
:x2 328.3750915527344,
|
||
:y2 378.73217010498047,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 268.71058654785156,
|
||
:y1 359.30358123779297,
|
||
:x2 328.3750915527344,
|
||
:y2 378.73217010498047,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 355},
|
||
:content {:text "scourge"},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "64350b44-dfae-4544-93f9-ff2b343fefd4",
|
||
:page 354,
|
||
:position {:bounding {:x1 314.14287185668945,
|
||
:y1 927.5714721679688,
|
||
:x2 770.6213264465332,
|
||
:y2 952.7143249511719,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 314.14287185668945,
|
||
:y1 927.5714721679688,
|
||
:x2 770.6213264465332,
|
||
:y2 952.7143249511719,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 354},
|
||
:content {:text "Lock With Queues, Test-and-set, Yield, And Wakeup"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64350b4e-9559-49d9-aa37-eda9fe425b7f",
|
||
:page 353,
|
||
:position {:bounding {:x1 0,
|
||
:y1 621.1428756713867,
|
||
:x2 738.2636413574219,
|
||
:y2 1106.0625305175781,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 0,
|
||
:y1 621.1428756713867,
|
||
:x2 0,
|
||
:y2 642.2857360839844,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 149.35714721679688,
|
||
:y1 1065.3839721679688,
|
||
:x2 738.2636413574219,
|
||
:y2 1084.8125305175781,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 123.83929443359375,
|
||
:y1 1086.6339721679688,
|
||
:x2 265.7547607421875,
|
||
:y2 1106.0625305175781,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 353},
|
||
:content {:text "The real problem with our previous approaches is that they leave too much to chance."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64350bfb-64f7-4d41-8cc2-260dbec3372d",
|
||
:page 354,
|
||
:position {:bounding {:x1 267.0446472167969,
|
||
:y1 1086.6339721679688,
|
||
:x2 590.4763793945312,
|
||
:y2 1106.0625610351562,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 267.0446472167969,
|
||
:y1 1086.6339721679688,
|
||
:x2 590.4763793945312,
|
||
:y2 1106.0625610351562,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 354},
|
||
:content {:text "park() to put a calling thread to sleep"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64350c01-39bb-4d15-b554-0287b13806ee",
|
||
:page 354,
|
||
:position {:bounding {:x1 0,
|
||
:y1 669.1428909301758,
|
||
:x2 816.99169921875,
|
||
:y2 1127.3214721679688,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 0,
|
||
:y1 669.1428909301758,
|
||
:x2 0,
|
||
:y2 690.2857475280762,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 633.232177734375,
|
||
:y1 1086.6339721679688,
|
||
:x2 816.99169921875,
|
||
:y2 1106.0625610351562,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 183.3571434020996,
|
||
:y1 1107.8929138183594,
|
||
:x2 415.88805770874023,
|
||
:y2 1127.3214721679688,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 354},
|
||
:content {:text "unpark(threadID) to wake a particular thread"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64351ba3-d4b5-4999-bc61-7733d5e0a061",
|
||
:page 356,
|
||
:position {:bounding {:x1 569.2232360839844,
|
||
:y1 702.4732360839844,
|
||
:x2 751.833984375,
|
||
:y2 727.6161193847656,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 569.2232360839844,
|
||
:y1 702.4732360839844,
|
||
:x2 751.833984375,
|
||
:y2 727.6161193847656,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 356},
|
||
:content {:text "wakeup/waiting race"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64351e9a-6505-4176-a6fb-ddf63f3245a8",
|
||
:page 356,
|
||
:position {:bounding {:x1 471.6607360839844,
|
||
:y1 1127.5625610351562,
|
||
:x2 516.3173828125,
|
||
:y2 1152.7054138183594,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 471.6607360839844,
|
||
:y1 1127.5625610351562,
|
||
:x2 516.3173828125,
|
||
:y2 1152.7054138183594,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 356},
|
||
:content {:text "futex"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64352221-d590-4371-a5f0-29e9cfa75ccb",
|
||
:page 357,
|
||
:position {:bounding {:x1 265.9553680419922,
|
||
:y1 829.5625305175781,
|
||
:x2 596.0395202636719,
|
||
:y2 854.7054138183594,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 379.21429443359375,
|
||
:y1 829.5625305175781,
|
||
:x2 596.0395202636719,
|
||
:y2 854.7054138183594,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 265.9553680419922,
|
||
:y1 831.1429138183594,
|
||
:x2 379.2243347167969,
|
||
:y2 850.5714721679688,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 357},
|
||
:content {:text "Figure 28.10: Linux-based Futex Locks"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643522a7-4b16-4998-9b2f-47a852681a16",
|
||
:page 358,
|
||
:position {:bounding {:x1 0,
|
||
:y1 157.14286422729492,
|
||
:x2 797.6362762451172,
|
||
:y2 485.67858505249023,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 0,
|
||
:y1 157.14286422729492,
|
||
:x2 0,
|
||
:y2 178.28571701049805,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 707.2857513427734,
|
||
:y1 439.2767906188965,
|
||
:x2 797.6362762451172,
|
||
:y2 464.41967391967773,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 183.3571548461914,
|
||
:y1 460.5357322692871,
|
||
:x2 220.56002044677734,
|
||
:y2 485.67858505249023,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 183.3571548461914,
|
||
:y1 463.9643211364746,
|
||
:x2 220.56002044677734,
|
||
:y2 483.0893211364746,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 358},
|
||
:content {:text "two-phase lock"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6435230e-d84a-4c91-8329-b7608b0d543a",
|
||
:page 358,
|
||
:position {:bounding {:x1 0,
|
||
:y1 189.14286422729492,
|
||
:x2 797.7836151123047,
|
||
:y2 524.0535850524902,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 0,
|
||
:y1 189.14286422729492,
|
||
:x2 0,
|
||
:y2 210.28571701049805,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 498.4398956298828,
|
||
:y1 483.37502670288086,
|
||
:x2 797.7836151123047,
|
||
:y2 502.80358505249023,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 183.3571548461914,
|
||
:y1 504.62502670288086,
|
||
:x2 546.6940078735352,
|
||
:y2 524.0535850524902,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 358},
|
||
:content {:text "in the first phase, the lock spins for a while, hoping that it can acquire the lock."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64352344-d140-468c-987c-e8afa05c2171",
|
||
:page 358,
|
||
:position {:bounding {:x1 0,
|
||
:y1 221.14286422729492,
|
||
:x2 797.7610244750977,
|
||
:y2 587.8214378356934,
|
||
:width 921.6,
|
||
:height 1382.4},
|
||
:rects ({:x1 0,
|
||
:y1 221.14286422729492,
|
||
:x2 0,
|
||
:y2 242.2857322692871,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 0,
|
||
:y1 237.14286422729492,
|
||
:x2 0,
|
||
:y2 258.2857322692871,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 298.8221740722656,
|
||
:y1 525.8750267028809,
|
||
:x2 797.7419738769531,
|
||
:y2 545.3036155700684,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 183.3571548461914,
|
||
:y1 547.1339378356934,
|
||
:x2 797.7610244750977,
|
||
:y2 566.5625267028809,
|
||
:width 921.6,
|
||
:height 1382.4}
|
||
{:x1 183.3571548461914,
|
||
:y1 568.3929100036621,
|
||
:x2 464.9660415649414,
|
||
:y2 587.8214378356934,
|
||
:width 921.6,
|
||
:height 1382.4}),
|
||
:page 358},
|
||
:content {:text " the lock is not acquired during the first spin phase, a second phase is entered, where the caller is put to sleep, and only woken up when the lock becomes free later."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643525b0-e245-489b-877d-a2a1d63e7ea6",
|
||
:page 361,
|
||
:position {:bounding {:x1 174.14286422729492,
|
||
:y1 325.0178756713867,
|
||
:x2 645.9385185241699,
|
||
:y2 360.44644927978516,
|
||
:width 806.3999999999999,
|
||
:height 1209.6},
|
||
:rects ({:x1 174.14286422729492,
|
||
:y1 325.0178756713867,
|
||
:x2 645.9385185241699,
|
||
:y2 360.44644927978516,
|
||
:width 806.3999999999999,
|
||
:height 1209.6}),
|
||
:page 361},
|
||
:content {:text "Lock-based Concurrent Data Structures"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643525e5-fb85-48d4-905a-2a88b9ac0b0d",
|
||
:page 361,
|
||
:position {:bounding {:x1 108.35714340209961,
|
||
:y1 815.107177734375,
|
||
:x2 298.91018295288086,
|
||
:y2 835.6786193847656,
|
||
:width 806.3999999999999,
|
||
:height 1209.6},
|
||
:rects ({:x1 108.35714340209961,
|
||
:y1 815.107177734375,
|
||
:x2 298.91018295288086,
|
||
:y2 835.6786193847656,
|
||
:width 806.3999999999999,
|
||
:height 1209.6}),
|
||
:page 361},
|
||
:content {:text "Concurrent Counters"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64352751-d9bd-4d5e-a8ba-cd18f86b1a15",
|
||
:page 363,
|
||
:position {:bounding {:x1 156.65179443359375,
|
||
:y1 746.232177734375,
|
||
:x2 260.2728805541992,
|
||
:y2 762.8036193847656,
|
||
:width 806.3999999999999,
|
||
:height 1209.6},
|
||
:rects ({:x1 156.65179443359375,
|
||
:y1 746.232177734375,
|
||
:x2 260.2728805541992,
|
||
:y2 762.8036193847656,
|
||
:width 806.3999999999999,
|
||
:height 1209.6}),
|
||
:page 363},
|
||
:content {:text "perfect scaling"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64352794-d7c8-42f9-8321-f874967cebf2",
|
||
:page 363,
|
||
:position {:bounding {:x1 376.82144927978516,
|
||
:y1 967.5000305175781,
|
||
:x2 523.3794326782227,
|
||
:y2 984.0715026855469,
|
||
:width 806.3999999999999,
|
||
:height 1209.6},
|
||
:rects ({:x1 376.82144927978516,
|
||
:y1 967.5000305175781,
|
||
:x2 523.3794326782227,
|
||
:y2 984.0715026855469,
|
||
:width 806.3999999999999,
|
||
:height 1209.6}),
|
||
:page 363},
|
||
:content {:text "approximate counter"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643530d8-9d09-4c8a-9e92-47dfe814ef50",
|
||
:page 367,
|
||
:position {:bounding {:x1 116.09400177001953,
|
||
:y1 446.52679443359375,
|
||
:x2 350.7183532714844,
|
||
:y2 468.24107360839844,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 116.09400177001953,
|
||
:y1 446.52679443359375,
|
||
:x2 350.7183532714844,
|
||
:y2 468.24107360839844,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 367},
|
||
:content {:text "Concurrent Linked Lists"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64353237-4b74-4148-b7c1-5854d83a18c7",
|
||
:page 369,
|
||
:position {:bounding {:x1 255.12501525878906,
|
||
:y1 1018.0357666015625,
|
||
:x2 451.5310516357422,
|
||
:y2 1035.7500610351562,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 255.12501525878906,
|
||
:y1 1018.0357666015625,
|
||
:x2 451.5310516357422,
|
||
:y2 1035.7500610351562,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 369},
|
||
:content {:text "hand-over-hand locking"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64353353-9de2-421b-967d-dc80a597eecd",
|
||
:page 370,
|
||
:position {:bounding {:x1 171.89286422729492,
|
||
:y1 644.6607360839844,
|
||
:x2 361.0623435974121,
|
||
:y2 666.3750305175781,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 171.89286422729492,
|
||
:y1 644.6607360839844,
|
||
:x2 361.0623435974121,
|
||
:y2 666.3750305175781,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 370},
|
||
:content {:text "Concurrent Queues"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6435360d-c176-494a-9d61-b1fd0107a9bd",
|
||
:page 372,
|
||
:position {:bounding {:x1 171.89286041259766,
|
||
:y1 604.0268096923828,
|
||
:x2 395.03311920166016,
|
||
:y2 625.7411041259766,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 171.89286041259766,
|
||
:y1 604.0268096923828,
|
||
:x2 395.03311920166016,
|
||
:y2 625.7411041259766,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 372},
|
||
:content {:text "Concurrent Hash Table"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6435363d-c697-42a6-bfd0-8a2332cef394",
|
||
:page 372,
|
||
:position {:bounding {:x1 0,
|
||
:y1 445.1428680419922,
|
||
:x2 745.5475311279297,
|
||
:y2 804.1607513427734,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 445.1428680419922,
|
||
:x2 0,
|
||
:y2 466.28575134277344,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 532.4713592529297,
|
||
:y1 766.5178680419922,
|
||
:x2 745.5475311279297,
|
||
:y2 784.2321624755859,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286041259766,
|
||
:y1 786.4464569091797,
|
||
:x2 632.3166275024414,
|
||
:y2 804.1607513427734,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 372},
|
||
:content {:text "instead of having a single lock for the entire structure, it uses a lock per hash bucket"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "6435365a-b5d6-46fc-a9a1-25b0d23aa529",
|
||
:page 372,
|
||
:position {:bounding {:x1 564.7891998291016,
|
||
:y1 1059.107177734375,
|
||
:x2 651.2378387451172,
|
||
:y2 1076.8214721679688,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 564.7891998291016,
|
||
:y1 1059.107177734375,
|
||
:x2 651.2378387451172,
|
||
:y2 1076.8214721679688,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 372},
|
||
:content {:text "ubiquitous "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "6435367f-dd9e-449d-b0e4-3d8c9e14f6c2",
|
||
:page 373,
|
||
:position {:bounding {:x1 320.9654083251953,
|
||
:y1 875.2946624755859,
|
||
:x2 378.3458709716797,
|
||
:y2 893.0089569091797,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 320.9654083251953,
|
||
:y1 875.2946624755859,
|
||
:x2 378.3458709716797,
|
||
:y2 893.0089569091797,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 373},
|
||
:content {:text "humble "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "643536c8-fc05-4bbe-8d1d-0f4f6d1c4fee",
|
||
:page 376,
|
||
:position {:bounding {:x1 443.3345642089844,
|
||
:y1 585.2410888671875,
|
||
:x2 497.6003112792969,
|
||
:y2 602.9553833007812,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 443.3345642089844,
|
||
:y1 585.2410888671875,
|
||
:x2 497.6003112792969,
|
||
:y2 602.9553833007812,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 376},
|
||
:content {:text "sloppy "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "643537d3-7d01-442b-b47e-59433c2aa6db",
|
||
:page 378,
|
||
:position {:bounding {:x1 596.2246246337891,
|
||
:y1 701.2500305175781,
|
||
:x2 659.0949554443359,
|
||
:y2 718.9643249511719,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 596.2246246337891,
|
||
:y1 701.2500305175781,
|
||
:x2 659.0949554443359,
|
||
:y2 718.9643249511719,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 378},
|
||
:content {:text "grossly "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "643537ff-1028-4725-8d7a-c0338cc946d3",
|
||
:page 378,
|
||
:position {:bounding {:x1 293.5893096923828,
|
||
:y1 858.1875305175781,
|
||
:x2 445.99464416503906,
|
||
:y2 881.6160888671875,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 293.5893096923828,
|
||
:y1 858.1875305175781,
|
||
:x2 445.99464416503906,
|
||
:y2 881.6160888671875,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 378},
|
||
:content {:text "condition variable"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64353882-7697-4c16-8e53-c8f59ea256c1",
|
||
:page 378,
|
||
:position {:bounding {:x1 0,
|
||
:y1 477.1428642272949,
|
||
:x2 747.7302322387695,
|
||
:y2 981.2410888671875,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 477.1428642272949,
|
||
:x2 0,
|
||
:y2 498.28572273254395,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 493.1428656578064,
|
||
:x2 0,
|
||
:y2 514.2857241630554,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 509.14286613464355,
|
||
:x2 0,
|
||
:y2 530.2857246398926,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 525.1428661346436,
|
||
:x2 0,
|
||
:y2 546.2857246398926,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 0,
|
||
:y1 541.1428680419922,
|
||
:x2 0,
|
||
:y2 562.2857246398926,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 484.25003814697266,
|
||
:y1 858.1875305175781,
|
||
:x2 641.9464797973633,
|
||
:y2 881.6160888671875,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 463.3002700805664,
|
||
:y1 859.8482360839844,
|
||
:x2 747.3339920043945,
|
||
:y2 877.7767944335938,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.8928680419922,
|
||
:y1 879.7768249511719,
|
||
:x2 745.5433197021484,
|
||
:y2 897.7053833007812,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 262.47322845458984,
|
||
:y1 898.0357360839844,
|
||
:x2 341.1931381225586,
|
||
:y2 921.4643249511719,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 531.553596496582,
|
||
:y1 898.0357360839844,
|
||
:x2 601.7216262817383,
|
||
:y2 921.4643249511719,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.8928680419922,
|
||
:y1 899.6964416503906,
|
||
:x2 747.192024230957,
|
||
:y2 917.6250305175781,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.8928680419922,
|
||
:y1 919.6250305175781,
|
||
:x2 745.5449066162109,
|
||
:y2 937.5535888671875,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 717.848274230957,
|
||
:y1 937.8928833007812,
|
||
:x2 747.7302322387695,
|
||
:y2 961.3214721679688,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.8928680419922,
|
||
:y1 939.5535888671875,
|
||
:x2 747.7302322387695,
|
||
:y2 957.482177734375,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.8928680419922,
|
||
:y1 957.8125305175781,
|
||
:x2 229.24837493896484,
|
||
:y2 981.2410888671875,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.8928680419922,
|
||
:y1 960.669677734375,
|
||
:x2 371.48160552978516,
|
||
:y2 978.5982360839844,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 378},
|
||
:content {:text "A condition variable is an explicit queue that threads can put themselves on when some state of execution(i.e., some condition) is not as desired (by waiting on the condition); some other thread, when it changes said state, can then wake one (or more) of those waiting threads and thus allow them to continue (by signaling on the condition). "},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643538d5-9ea3-4399-9fa2-d75fdf0e1dd4",
|
||
:page 378,
|
||
:position {:bounding {:x1 0,
|
||
:y1 653.1428680419922,
|
||
:x2 747.631721496582,
|
||
:y2 1116.6607666015625,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 653.1428680419922,
|
||
:x2 0,
|
||
:y2 674.2857284545898,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 650.6428909301758,
|
||
:y1 1079.0178833007812,
|
||
:x2 747.631721496582,
|
||
:y2 1096.9464721679688,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.8928680419922,
|
||
:y1 1098.9464721679688,
|
||
:x2 594.3628997802734,
|
||
:y2 1116.6607666015625,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 378},
|
||
:content {:text "wait() call is executed when a thread wishes to put itself to sleep;"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643538de-cc40-4dd2-8f03-9492004f209b",
|
||
:page 379,
|
||
:position {:bounding {:x1 0,
|
||
:y1 541.1428680419922,
|
||
:x2 689.7592334747314,
|
||
:y2 885.2500305175781,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 541.1428680419922,
|
||
:x2 0,
|
||
:y2 562.2857360839844,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09822273254395,
|
||
:y1 847.607177734375,
|
||
:x2 689.7592334747314,
|
||
:y2 865.3214721679688,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 116.09822273254395,
|
||
:y1 867.5357360839844,
|
||
:x2 633.988603591919,
|
||
:y2 885.2500305175781,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 379},
|
||
:content {:text "is executed when a thread has changed something in the program and thus wants to wake a sleeping thread waiting on this condition. S"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64353eb8-8ed8-4680-a3c0-91608b429408",
|
||
:page 379,
|
||
:position {:bounding {:x1 360.32312774658203,
|
||
:y1 1098.9464721679688,
|
||
:x2 409.81058502197266,
|
||
:y2 1116.6607666015625,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 360.32312774658203,
|
||
:y1 1098.9464721679688,
|
||
:x2 409.81058502197266,
|
||
:y2 1116.6607666015625,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 379},
|
||
:content {:text "stems "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "643547c5-1613-49e9-899e-0e86f59a1462",
|
||
:page 380,
|
||
:position {:bounding {:x1 0,
|
||
:y1 285.14288330078125,
|
||
:x2 747.3582305908203,
|
||
:y2 563.0268249511719,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 285.14288330078125,
|
||
:x2 0,
|
||
:y2 306.2857437133789,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 541.1089324951172,
|
||
:y1 525.1786041259766,
|
||
:x2 747.3582305908203,
|
||
:y2 543.107177734375,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286422729492,
|
||
:y1 545.0982513427734,
|
||
:x2 745.9600219726562,
|
||
:y2 563.0268249511719,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 380},
|
||
:content {:text "uses a while loop instead of just an if statement when deciding whether to wait on the condition."},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64354974-adea-4b20-90f4-a12ebe1e4d5b",
|
||
:page 382,
|
||
:position {:bounding {:x1 279.43043518066406,
|
||
:y1 543.8750152587891,
|
||
:x2 506.8169403076172,
|
||
:y2 567.3035888671875,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 279.4464416503906,
|
||
:y1 543.8750152587891,
|
||
:x2 443.5089569091797,
|
||
:y2 567.3035888671875,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 279.43043518066406,
|
||
:y1 545.5357208251953,
|
||
:x2 506.8169403076172,
|
||
:y2 563.4642944335938,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 382},
|
||
:content {:text "producer/consumer problem,"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64354cc4-14c5-408d-b879-7d4d011b2b5c",
|
||
:page 385,
|
||
:position {:bounding {:x1 294.6515197753906,
|
||
:y1 1077.3572082519531,
|
||
:x2 425.10882568359375,
|
||
:y2 1100.7857971191406,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 294.6785888671875,
|
||
:y1 1077.3572082519531,
|
||
:x2 425.10882568359375,
|
||
:y2 1100.7857971191406,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 294.6515197753906,
|
||
:y1 1079.0179138183594,
|
||
:x2 294.65740966796875,
|
||
:y2 1096.7322082519531,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 385},
|
||
:content {:text "Mesa semantics"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64354d46-4286-44fd-9e82-2ba562a50f25",
|
||
:page 386,
|
||
:position {:bounding {:x1 0,
|
||
:y1 477.1428909301758,
|
||
:x2 746.0656509399414,
|
||
:y2 818.6518249511719,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 0,
|
||
:y1 477.1428909301758,
|
||
:x2 0,
|
||
:y2 498.28575134277344,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286422729492,
|
||
:y1 779.3482666015625,
|
||
:x2 308.99941635131836,
|
||
:y2 802.7768249511719,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 308.9821548461914,
|
||
:y1 781.0089721679688,
|
||
:x2 746.0656509399414,
|
||
:y2 798.9375610351562,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 171.89286422729492,
|
||
:y1 800.9375610351562,
|
||
:x2 693.3923149108887,
|
||
:y2 818.6518249511719,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 386},
|
||
:content {:text "Hoare semantics, is harder to build but provides a stronger guarantee that the woken thread will run immediately upon being woken "},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64354db0-8c74-4c14-b063-d26378a10555",
|
||
:page 386,
|
||
:position {:bounding {:x1 281.8214340209961,
|
||
:y1 997.6697082519531,
|
||
:x2 477.6873245239258,
|
||
:y2 1021.0982971191406,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 286.6964340209961,
|
||
:y1 997.6697082519531,
|
||
:x2 477.6873245239258,
|
||
:y2 1021.0982971191406,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 281.8214340209961,
|
||
:y1 999.3304138183594,
|
||
:x2 477.6873245239258,
|
||
:y2 1017.2590026855469,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 386},
|
||
:content {:text " always use while loops"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "64354f54-b26c-48dc-a328-4ae355b680f3",
|
||
:page 390,
|
||
:position {:bounding {:x1 593.6900482177734,
|
||
:y1 484.1875305175781,
|
||
:x2 652.7586212158203,
|
||
:y2 501.9018249511719,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 593.6900482177734,
|
||
:y1 484.1875305175781,
|
||
:x2 652.7586212158203,
|
||
:y2 501.9018249511719,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 390},
|
||
:content {:text "albeit "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "64355441-5a1b-4015-baa1-65917526079c",
|
||
:page 391,
|
||
:position {:bounding {:x1 494.5921096801758,
|
||
:y1 1057.4464721679688,
|
||
:x2 649.2800369262695,
|
||
:y2 1080.8750610351562,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 494.61609649658203,
|
||
:y1 1057.4464721679688,
|
||
:x2 649.2800369262695,
|
||
:y2 1080.8750610351562,
|
||
:width 864,
|
||
:height 1296}
|
||
{:x1 494.5921096801758,
|
||
:y1 1059.1072082519531,
|
||
:x2 649.2800369262695,
|
||
:y2 1076.8214721679688,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 391},
|
||
:content {:text "covering condition"},
|
||
:properties {:color "yellow"}}
|
||
{:id #uuid "643554f4-75a7-48fa-9366-87058ee723fb",
|
||
:page 390,
|
||
:position {:bounding {:x1 171.89286422729492,
|
||
:y1 317.60716247558594,
|
||
:x2 249.12459182739258,
|
||
:y2 341.0357208251953,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 171.89286422729492,
|
||
:y1 317.60716247558594,
|
||
:x2 249.12459182739258,
|
||
:y2 341.0357208251953,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 390},
|
||
:content {:text "spurious "},
|
||
:properties {:color "green"}}
|
||
{:id #uuid "64355502-f41f-40dd-b71f-e0abdbc76716",
|
||
:page 390,
|
||
:position {:bounding {:x1 171.89286422729492,
|
||
:y1 317.60716247558594,
|
||
:x2 322.3585624694824,
|
||
:y2 341.0357208251953,
|
||
:width 864,
|
||
:height 1296},
|
||
:rects ({:x1 171.89286422729492,
|
||
:y1 317.60716247558594,
|
||
:x2 322.3585624694824,
|
||
:y2 341.0357208251953,
|
||
:width 864,
|
||
:height 1296}),
|
||
:page 390},
|
||
:content {:text "spurious wakeups"},
|
||
:properties {:color "yellow"}}],
|
||
:extra {:page 396}}
|