LogSeq/assets/ostep_1681115599584_0.edn
2023-04-11 20:48:42 +08:00

1817 lines
96 KiB
Clojure
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{: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 "Petersons 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}}