gitextract_mqx2volu/ ├── .gitignore ├── LICENSE.txt ├── README.md ├── cpp/ │ ├── .gitignore │ ├── README.md │ ├── cpp-boost/ │ │ ├── demo00.cpp │ │ ├── demo01a01-hello.cpp │ │ ├── demo01a02-hello.cpp │ │ ├── demo01b-hello-class01.cpp │ │ ├── demo01b-hello-class02.cpp │ │ ├── demo01b-hello-class03.cpp │ │ ├── demo01b-hello-functor.cpp │ │ ├── demo02-join.cpp │ │ ├── demo03a-pass-arg.cpp │ │ ├── demo03b-pass-arg.cpp │ │ ├── demo03c-pass-arg.cpp │ │ ├── demo04a-sleep.cpp │ │ ├── demo04b-sleep.cpp │ │ ├── demo05-id.cpp │ │ ├── demo06a-list-threads.cpp │ │ ├── demo06b-list-threads.cpp │ │ ├── demo06c-list-threads.cpp │ │ ├── demo07-terminate.cpp │ │ ├── demo08-return-value.cpp │ │ ├── demo09-detach.cpp │ │ ├── demo10-yield.cpp │ │ ├── demo11a-exec-service.cpp │ │ ├── demo11b-exec-service.cpp │ │ ├── demo12a-race-condition.cpp │ │ ├── demo12b01-data-race-single.cpp │ │ ├── demo12b02-data-race-multi.cpp │ │ ├── demo12c01-race-cond-data-race.cpp │ │ ├── demo12c02-race-cond-data-race.cpp │ │ ├── demo13a-mutex.cpp │ │ ├── demo13b01-mutex.cpp │ │ ├── demo13b02-mutex.cpp │ │ ├── demo13c-mutex-trylock.cpp │ │ ├── demo14-synchronized-block.cpp │ │ ├── demo15a-deadlock.cpp │ │ ├── demo15b-deadlock.cpp │ │ ├── demo16-monitor.cpp │ │ ├── demo17a-reentrant-lock.cpp │ │ ├── demo17b-reentrant-lock.cpp │ │ ├── demo17c-reentrant-lock.cpp │ │ ├── demo18a01-barrier.cpp │ │ ├── demo18a02-barrier.cpp │ │ ├── demo18a03-barrier.cpp │ │ ├── demo18b01-latch.cpp │ │ ├── demo18b02-latch.cpp │ │ ├── demo19a-read-write-lock.cpp │ │ ├── demo19b-read-write-lock.cpp │ │ ├── demo20a01-semaphore.cpp │ │ ├── demo20a02-semaphore.cpp │ │ ├── demo20a03-semaphore-deadlock.cpp │ │ ├── demo20b-semaphore.cpp │ │ ├── demo21a01-condition-variable.cpp │ │ ├── demo21a02-condition-variable.cpp │ │ ├── demo21a03-condition-variable.cpp │ │ ├── demo21b-condition-variable.cpp │ │ ├── demo22a-blocking-queue.cpp │ │ ├── demo22b-blocking-queue.cpp │ │ ├── demo23a-thread-local.cpp │ │ ├── demo23b-thread-local.cpp │ │ ├── demo24-volatile.cpp │ │ ├── demo25a-atomic.cpp │ │ ├── demo25b-atomic.cpp │ │ ├── demoex-async-future.cpp │ │ ├── exer01a-max-div.cpp │ │ ├── exer01b-max-div.cpp │ │ ├── exer01c-max-div.cpp │ │ ├── exer02a01-producer-consumer.cpp │ │ ├── exer02a02-producer-consumer.cpp │ │ ├── exer02a03-producer-consumer.cpp │ │ ├── exer02a04-producer-consumer.cpp │ │ ├── exer02b01-producer-consumer.cpp │ │ ├── exer02b02-producer-consumer.cpp │ │ ├── exer02b03-producer-consumer.cpp │ │ ├── exer02b04-producer-consumer.cpp │ │ ├── exer02c-producer-consumer.cpp │ │ ├── exer03a-readers-writers.cpp │ │ ├── exer03b-readers-writers.cpp │ │ ├── exer04-dining-philosophers.cpp │ │ ├── exer05-util.hpp │ │ ├── exer05a-product-matrix-vector.cpp │ │ ├── exer05b-product-matrix-matrix.cpp │ │ ├── exer06a-blocking-queue.cpp │ │ ├── exer06b01-blocking-queue.cpp │ │ ├── exer06b02-blocking-queue.cpp │ │ ├── exer07a-data-server.cpp │ │ ├── exer07b-data-server.cpp │ │ ├── exer07c-data-server.cpp │ │ ├── exer07d-data-server.cpp │ │ ├── exer08-exec-service-itask.hpp │ │ ├── exer08-exec-service-main.cpp │ │ ├── exer08-exec-service-v0a.hpp │ │ ├── exer08-exec-service-v0b.hpp │ │ ├── exer08-exec-service-v1a.hpp │ │ ├── exer08-exec-service-v1b.hpp │ │ ├── exer08-exec-service-v2a.hpp │ │ ├── exer08-exec-service-v2b.hpp │ │ ├── mylib-blockingqueue.hpp │ │ ├── mylib-random.hpp │ │ ├── mylib-semaphore.hpp │ │ └── mylib-time.hpp │ ├── cpp-pthread/ │ │ ├── demo00.cpp │ │ ├── demo01-hello.cpp │ │ ├── demo02-join.cpp │ │ ├── demo03a01-pass-arg.cpp │ │ ├── demo03a02-pass-arg.cpp │ │ ├── demo03b01-pass-arg.cpp │ │ ├── demo03b02-pass-arg.cpp │ │ ├── demo04-sleep.cpp │ │ ├── demo05-id.cpp │ │ ├── demo06a-list-threads.cpp │ │ ├── demo06b-list-threads.cpp │ │ ├── demo07a-terminate.cpp │ │ ├── demo07b-terminate.cpp │ │ ├── demo08a-return-value.cpp │ │ ├── demo08b-return-value.cpp │ │ ├── demo09a-detach.cpp │ │ ├── demo09b-detach.cpp │ │ ├── demo10-yield.cpp │ │ ├── demo11a-exec-service.cpp │ │ ├── demo11b-exec-service.cpp │ │ ├── demo12a-race-condition.cpp │ │ ├── demo12b01-data-race-single.cpp │ │ ├── demo12b02-data-race-multi.cpp │ │ ├── demo12bex-data-race-fork.cpp │ │ ├── demo12c01-race-cond-data-race.cpp │ │ ├── demo12c02-race-cond-data-race.cpp │ │ ├── demo13a-mutex.cpp │ │ ├── demo13b-mutex-trylock.cpp │ │ ├── demo14-synchronized-block.cpp │ │ ├── demo15a-deadlock.cpp │ │ ├── demo15b-deadlock.cpp │ │ ├── demo16-monitor.cpp │ │ ├── demo17a-reentrant-lock.cpp │ │ ├── demo17b-reentrant-lock.cpp │ │ ├── demo17c-reentrant-lock.cpp │ │ ├── demo18a01-barrier.cpp │ │ ├── demo18a02-barrier.cpp │ │ ├── demo18a03-barrier.cpp │ │ ├── demo18b01-latch.cpp │ │ ├── demo18b02-latch.cpp │ │ ├── demo19-read-write-lock.cpp │ │ ├── demo20a01-semaphore.cpp │ │ ├── demo20a02-semaphore.cpp │ │ ├── demo20a03-semaphore-deadlock.cpp │ │ ├── demo20b-semaphore.cpp │ │ ├── demo21a01-condition-variable.cpp │ │ ├── demo21a02-condition-variable.cpp │ │ ├── demo21a03-condition-variable.cpp │ │ ├── demo21b-condition-variable.cpp │ │ ├── demo22a-blocking-queue.cpp │ │ ├── demo22b-blocking-queue.cpp │ │ ├── demo23a-thread-local.cpp │ │ ├── demo23b-thread-local.cpp │ │ ├── demo24-volatile.cpp │ │ ├── demo25a-atomic.c │ │ ├── demo25b-atomic.c │ │ ├── demoex-attribute.cpp │ │ ├── demoex-oop.cpp │ │ ├── demoex-signal.cpp │ │ ├── exer01a-max-div.cpp │ │ ├── exer01b-max-div.cpp │ │ ├── exer01c-max-div.cpp │ │ ├── exer02a01-producer-consumer.cpp │ │ ├── exer02a02-producer-consumer.cpp │ │ ├── exer02a03-producer-consumer.cpp │ │ ├── exer02a04-producer-consumer.cpp │ │ ├── exer02b01-producer-consumer.cpp │ │ ├── exer02b02-producer-consumer.cpp │ │ ├── exer02b03-producer-consumer.cpp │ │ ├── exer02b04-producer-consumer.cpp │ │ ├── exer02c-producer-consumer.cpp │ │ ├── exer03a-readers-writers.cpp │ │ ├── exer03b-readers-writers.cpp │ │ ├── exer04-dining-philosophers.cpp │ │ ├── exer05-util.hpp │ │ ├── exer05a-product-matrix-vector.cpp │ │ ├── exer05b-product-matrix-matrix.cpp │ │ ├── exer06a-blocking-queue.cpp │ │ ├── exer06b01-blocking-queue.cpp │ │ ├── exer06b02-blocking-queue.cpp │ │ ├── exer07a-data-server.cpp │ │ ├── exer07b-data-server.cpp │ │ ├── exer07c-data-server.cpp │ │ ├── exer07d-data-server.cpp │ │ ├── exer08-exec-service-itask.hpp │ │ ├── exer08-exec-service-main.cpp │ │ ├── exer08-exec-service-v0a.hpp │ │ ├── exer08-exec-service-v0b.hpp │ │ ├── exer08-exec-service-v1a.hpp │ │ ├── exer08-exec-service-v1b.hpp │ │ ├── exer08-exec-service-v2a.hpp │ │ ├── exer08-exec-service-v2b.hpp │ │ ├── exerex-countdown-timer-a.cpp │ │ ├── exerex-countdown-timer-b.cpp │ │ ├── mylib-blockingqueue.hpp │ │ ├── mylib-execservice.hpp │ │ └── mylib-latch.hpp │ └── cpp-std/ │ ├── demo00.cpp │ ├── demo01a01-hello.cpp │ ├── demo01a02-hello.cpp │ ├── demo01b-hello-class01.cpp │ ├── demo01b-hello-class02.cpp │ ├── demo01b-hello-class03.cpp │ ├── demo01b-hello-functor.cpp │ ├── demo01c-hello-lambda.cpp │ ├── demo02-join.cpp │ ├── demo03a-pass-arg.cpp │ ├── demo03b-pass-arg.cpp │ ├── demo03c-pass-arg.cpp │ ├── demo04a-sleep.cpp │ ├── demo04b-sleep.cpp │ ├── demo05-id.cpp │ ├── demo06a-list-threads.cpp │ ├── demo06b-list-threads.cpp │ ├── demo07-terminate.cpp │ ├── demo08a-return-value.cpp │ ├── demo08b-return-value.cpp │ ├── demo08c-return-value.cpp │ ├── demo09-detach.cpp │ ├── demo10-yield.cpp │ ├── demo11a-exec-service.cpp │ ├── demo11b-exec-service.cpp │ ├── demo12a-race-condition.cpp │ ├── demo12b01-data-race-single.cpp │ ├── demo12b02-data-race-multi.cpp │ ├── demo12c01-race-cond-data-race.cpp │ ├── demo12c02-race-cond-data-race.cpp │ ├── demo13a-mutex.cpp │ ├── demo13b01-mutex.cpp │ ├── demo13b02-mutex.cpp │ ├── demo13c-mutex-trylock.cpp │ ├── demo14-synchronized-block.cpp │ ├── demo15a-deadlock.cpp │ ├── demo15b-deadlock.cpp │ ├── demo16-monitor.cpp │ ├── demo17a-reentrant-lock.cpp │ ├── demo17b-reentrant-lock.cpp │ ├── demo17c-reentrant-lock.cpp │ ├── demo18a01-barrier.cpp │ ├── demo18a02-barrier.cpp │ ├── demo18a03-barrier.cpp │ ├── demo18b01-latch.cpp │ ├── demo18b02-latch.cpp │ ├── demo19a-read-write-lock.cpp │ ├── demo19b-read-write-lock.cpp │ ├── demo20a01-semaphore.cpp │ ├── demo20a02-semaphore.cpp │ ├── demo20a03-semaphore-deadlock.cpp │ ├── demo20b-semaphore.cpp │ ├── demo21a01-condition-variable.cpp │ ├── demo21a02-condition-variable.cpp │ ├── demo21a03-condition-variable.cpp │ ├── demo21b-condition-variable.cpp │ ├── demo22a-blocking-queue.cpp │ ├── demo22b-blocking-queue.cpp │ ├── demo23a01-thread-local.cpp │ ├── demo23a02-thread-local.cpp │ ├── demo23b-thread-local.cpp │ ├── demo24-volatile.cpp │ ├── demo25a-atomic.cpp │ ├── demo25b-atomic.cpp │ ├── demo25c-atomic-gcc.cpp │ ├── demoex-async-future.cpp │ ├── demoex-jthread.cpp │ ├── exer01a-max-div.cpp │ ├── exer01b-max-div.cpp │ ├── exer01c-max-div.cpp │ ├── exer02a01-producer-consumer.cpp │ ├── exer02a02-producer-consumer.cpp │ ├── exer02a03-producer-consumer.cpp │ ├── exer02a04-producer-consumer.cpp │ ├── exer02b01-producer-consumer.cpp │ ├── exer02b02-producer-consumer.cpp │ ├── exer02b03-producer-consumer.cpp │ ├── exer02b04-producer-consumer.cpp │ ├── exer02c-producer-consumer.cpp │ ├── exer03a-readers-writers.cpp │ ├── exer03b-readers-writers.cpp │ ├── exer04-dining-philosophers.cpp │ ├── exer05-util.hpp │ ├── exer05a-product-matrix-vector.cpp │ ├── exer05b-product-matrix-matrix.cpp │ ├── exer06a-blocking-queue.cpp │ ├── exer06b01-blocking-queue.cpp │ ├── exer06b02-blocking-queue.cpp │ ├── exer07a-data-server.cpp │ ├── exer07b-data-server.cpp │ ├── exer07c-data-server.cpp │ ├── exer07d-data-server.cpp │ ├── exer08-exec-service-itask.hpp │ ├── exer08-exec-service-main.cpp │ ├── exer08-exec-service-v0a.hpp │ ├── exer08-exec-service-v0b.hpp │ ├── exer08-exec-service-v1a.hpp │ ├── exer08-exec-service-v1b.hpp │ ├── exer08-exec-service-v2a.hpp │ ├── exer08-exec-service-v2b.hpp │ ├── exerex-countdown-timer.cpp │ ├── mylib-blockingqueue.hpp │ ├── mylib-execservice.hpp │ ├── mylib-random.hpp │ └── mylib-time.hpp ├── csharp/ │ ├── .gitignore │ ├── IRunnable.cs │ ├── Program.cs │ ├── demo/ │ │ ├── demo00-intro.cs │ │ ├── demo01a-hello.cs │ │ ├── demo01b01-hello.cs │ │ ├── demo01b02-hello.cs │ │ ├── demo01ex-name.cs │ │ ├── demo02a-join.cs │ │ ├── demo02b-join.cs │ │ ├── demo03a-pass-arg.cs │ │ ├── demo03b-pass-arg.cs │ │ ├── demo03c-pass-arg.cs │ │ ├── demo03d-pass-arg.cs │ │ ├── demo04-sleep.cs │ │ ├── demo05-id.cs │ │ ├── demo06a-list-threads.cs │ │ ├── demo06b-list-threads.cs │ │ ├── demo07-terminate.cs │ │ ├── demo08a-return-value.cs │ │ ├── demo08b-return-value.cs │ │ ├── demo09-detach.cs │ │ ├── demo10-yield.cs │ │ ├── demo11a01-exec-service.cs │ │ ├── demo11a02-exec-service.cs │ │ ├── demo11a03-exec-service.cs │ │ ├── demo11a04-exec-service.cs │ │ ├── demo11a05-exec-service.cs │ │ ├── demo11b01-exec-service-parallel.cs │ │ ├── demo11b02-exec-service-parallel.cs │ │ ├── demo11c-exec-service.cs │ │ ├── demo12a-race-condition.cs │ │ ├── demo12b01-data-race-single.cs │ │ ├── demo12b02-data-race-multi.cs │ │ ├── demo12c01-race-cond-data-race.cs │ │ ├── demo12c02-race-cond-data-race.cs │ │ ├── demo13a-mutex.cs │ │ ├── demo13b-mutex-trylock.cs │ │ ├── demo14-synchronized-block.cs │ │ ├── demo15a-deadlock.cs │ │ ├── demo15b-deadlock.cs │ │ ├── demo16-monitor.cs │ │ ├── demo17a-reentrant-lock.cs │ │ ├── demo17b-reentrant-lock.cs │ │ ├── demo18a01-barrier.cs │ │ ├── demo18a03-barrier.cs │ │ ├── demo18b01-latch.cs │ │ ├── demo18b02-latch.cs │ │ ├── demo19-read-write-lock.cs │ │ ├── demo20a01-semaphore.cs │ │ ├── demo20a02-semaphore.cs │ │ ├── demo20a03-semaphore-deadlock.cs │ │ ├── demo20b-semaphore.cs │ │ ├── demo21a01-condition-variable.cs │ │ ├── demo21a02-condition-variable.cs │ │ ├── demo21a03-condition-variable.cs │ │ ├── demo21b-condition-variable.cs │ │ ├── demo22a-blocking-queue.cs │ │ ├── demo22b-blocking-queue.cs │ │ ├── demo23a01-thread-local.cs │ │ ├── demo23a02-thread-local.cs │ │ ├── demo23b-thread-local.cs │ │ ├── demo24-volatile.cs │ │ ├── demo25a-atomic.cs │ │ └── demo25b-atomic.cs │ ├── demoex/ │ │ ├── demoex-async-future-a01.cs │ │ ├── demoex-async-future-a02.cs │ │ ├── demoex-async-future-a03.cs │ │ ├── demoex-async-future-a04.cs │ │ ├── demoex-async-future-a05.cs │ │ ├── demoex-async-future-b01.cs │ │ ├── demoex-async-future-b02.cs │ │ ├── demoex-async-future-b03.cs │ │ ├── demoex-async-future-b04.cs │ │ ├── demoex-async-future-c01.cs │ │ └── demoex-async-future-c02.cs │ ├── exercise/ │ │ ├── exer01a-max-div.cs │ │ ├── exer01b-max-div.cs │ │ ├── exer01c-max-div.cs │ │ ├── exer02a01-producer-consumer.cs │ │ ├── exer02a02-producer-consumer.cs │ │ ├── exer02a03-producer-consumer.cs │ │ ├── exer02a04-producer-consumer.cs │ │ ├── exer02b01-producer-consumer.cs │ │ ├── exer02b02-producer-consumer.cs │ │ ├── exer02b03-producer-consumer.cs │ │ ├── exer02b04-producer-consumer.cs │ │ ├── exer02c-producer-consumer.cs │ │ ├── exer03a-readers-writers.cs │ │ ├── exer03b-readers-writers.cs │ │ ├── exer04a-dining-philosophers.cs │ │ ├── exer04b-dining-philosophers.cs │ │ ├── exer05-util.cs │ │ ├── exer05a-product-matrix-vector.cs │ │ ├── exer05b-product-matrix-matrix.cs │ │ ├── exer06a-blocking-queue.cs │ │ ├── exer06b01-blocking-queue.cs │ │ ├── exer06b02-blocking-queue.cs │ │ ├── exer07a-data-server.cs │ │ ├── exer07b-data-server.cs │ │ ├── exer07c-data-server.cs │ │ ├── exer07d-data-server.cs │ │ ├── exer08-exec-service-main.cs │ │ ├── exer08-exec-service-v0a.cs │ │ ├── exer08-exec-service-v0b.cs │ │ ├── exer08-exec-service-v1a.cs │ │ ├── exer08-exec-service-v1b.cs │ │ ├── exer08-exec-service-v2a.cs │ │ └── exer08-exec-service-v2b.cs │ ├── multithreading.csproj │ └── multithreading.sln ├── java/ │ ├── .gitignore │ ├── README.md │ └── src/ │ ├── demo00_intro/ │ │ └── App.java │ ├── demo01_hello/ │ │ ├── AppA01.java │ │ ├── AppA02.java │ │ ├── AppB01.java │ │ ├── AppB02.java │ │ ├── AppB03.java │ │ ├── AppC01.java │ │ ├── AppC02.java │ │ └── AppExtra.java │ ├── demo02_join/ │ │ ├── AppA.java │ │ └── AppB.java │ ├── demo03_pass_arg/ │ │ ├── AppA.java │ │ ├── AppB.java │ │ └── AppC.java │ ├── demo04_sleep/ │ │ └── App.java │ ├── demo05_id/ │ │ └── App.java │ ├── demo06_list_threads/ │ │ ├── AppA.java │ │ ├── AppB01.java │ │ └── AppB02.java │ ├── demo07_terminate/ │ │ ├── AppA.java │ │ └── AppB.java │ ├── demo08_return_value/ │ │ ├── AppA.java │ │ ├── AppB.java │ │ └── AppC.java │ ├── demo09_detach/ │ │ └── App.java │ ├── demo10_yield/ │ │ └── App.java │ ├── demo11_exec_service/ │ │ ├── AppA.java │ │ ├── AppB01.java │ │ ├── AppB02.java │ │ ├── AppC01.java │ │ ├── AppC02.java │ │ ├── AppC03.java │ │ ├── AppC04.java │ │ ├── AppC05.java │ │ ├── AppC06.java │ │ └── AppExtra.java │ ├── demo12_race_condition/ │ │ ├── AppA.java │ │ ├── AppB01.java │ │ ├── AppB02.java │ │ ├── AppC01.java │ │ └── AppC02.java │ ├── demo13_mutex/ │ │ ├── AppA.java │ │ └── AppB.java │ ├── demo14_synchronized_block/ │ │ ├── AppA.java │ │ ├── AppB01.java │ │ ├── AppB02.java │ │ └── AppC.java │ ├── demo15_deadlock/ │ │ ├── AppA.java │ │ └── AppB.java │ ├── demo16_monitor/ │ │ └── App.java │ ├── demo17_reentrant_lock/ │ │ ├── AppA01.java │ │ ├── AppA02.java │ │ ├── AppB01.java │ │ └── AppB02.java │ ├── demo18_barrier_latch/ │ │ ├── AppA01.java │ │ ├── AppA02.java │ │ ├── AppA03.java │ │ ├── AppB01.java │ │ └── AppB02.java │ ├── demo19_read_write_lock/ │ │ └── App.java │ ├── demo20_semaphore/ │ │ ├── AppA01.java │ │ ├── AppA02.java │ │ ├── AppA03.java │ │ └── AppB.java │ ├── demo21_condition_variable/ │ │ ├── AppA01.java │ │ ├── AppA02.java │ │ ├── AppA03.java │ │ └── AppB.java │ ├── demo22_blocking_queue/ │ │ ├── AppA.java │ │ ├── AppB.java │ │ └── AppExtra.java │ ├── demo23_thread_local/ │ │ ├── AppA01.java │ │ ├── AppA02.java │ │ └── AppB.java │ ├── demo24_volatile/ │ │ └── App.java │ ├── demo25_atomic/ │ │ ├── AppA.java │ │ └── AppB.java │ ├── demoex/ │ │ └── async/ │ │ ├── AppA.java │ │ ├── AppB01.java │ │ ├── AppB02.java │ │ ├── AppB03.java │ │ ├── AppB04.java │ │ ├── AppC01.java │ │ └── AppC02.java │ ├── exer01_max_div/ │ │ ├── AppA.java │ │ ├── AppB.java │ │ └── AppC.java │ ├── exer02_producer_consumer/ │ │ ├── AppA01.java │ │ ├── AppA02.java │ │ ├── AppA03.java │ │ ├── AppA04.java │ │ ├── AppB01.java │ │ ├── AppB02.java │ │ ├── AppB03.java │ │ ├── AppB04.java │ │ └── AppC.java │ ├── exer03_readers_writers/ │ │ ├── AppA.java │ │ └── AppB.java │ ├── exer04_dining_philosophers/ │ │ ├── AppA.java │ │ └── AppB.java │ ├── exer05_product_matrix/ │ │ ├── AppA.java │ │ ├── AppB.java │ │ └── MyUtil.java │ ├── exer06_blocking_queue/ │ │ ├── AppA.java │ │ ├── AppB01.java │ │ └── AppB02.java │ ├── exer07_data_server/ │ │ ├── AppA.java │ │ ├── AppB.java │ │ ├── AppC.java │ │ └── AppD.java │ └── exer08_exec_service/ │ ├── App.java │ ├── MyExecServiceV0A.java │ ├── MyExecServiceV0B.java │ ├── MyExecServiceV1A.java │ ├── MyExecServiceV1B.java │ ├── MyExecServiceV2A.java │ └── MyExecServiceV2B.java ├── js-nodejs/ │ ├── .gitignore │ ├── demo00.js │ ├── demo01a-hello.js │ ├── demo01b-hello-worker.js │ ├── demo01b-hello.js │ ├── demo02-join.js │ ├── demo03a-pass-arg.js │ ├── demo03b-pass-arg.js │ ├── demo04-sleep.js │ ├── demo05-id.js │ ├── demo06a-list-threads.js │ ├── demo06b-list-threads.js │ ├── demo07-terminate.js │ ├── demo08a-return-value.js │ ├── demo08b-return-value.js │ ├── demo11a-exec-service.js │ ├── demo11b-exec-service.js │ ├── demo12-race-condition.js │ ├── demo12b01-data-race-single.js │ ├── demo12b02-data-race-multi.js │ ├── demo12c-race-cond-data-race.js │ ├── demo13-mutex.js │ ├── demo13ex-mutex-problem.js │ ├── demo13ex-mutex-solve.js │ ├── demo15a-deadlock.js │ ├── demo15b-deadlock.js │ ├── demo15ex-deadlock.js │ ├── demo25-atomic.js │ ├── exer01a-max-div.js │ ├── exer01c-max-div.js │ ├── exerex-userhash-problem.js │ ├── exerex-userhash-solve01.js │ ├── exerex-userhash-solve02-faster.js │ ├── exerex-userhash-solve03-faster.js │ ├── exerex-userhash-util.js │ ├── mylib.js │ ├── mylib_mutex.js │ └── package.json ├── notes-articles.md ├── notes-demos-exercises.md ├── old/ │ ├── cpppthread-reentrant-lock-a.cpp │ ├── cpppthread-reentrant-lock-b.cpp │ ├── cppstd-data-race.cpp │ ├── cppstd-reentrant-lock-a.cpp │ └── cppstd-reentrant-lock-b.cpp ├── python/ │ ├── .gitignore │ ├── demo00.py │ ├── demo01_hello.py │ ├── demo01ex_name.py │ ├── demo02a_join.py │ ├── demo02b_join.py │ ├── demo03a_pass_arg.py │ ├── demo03b_pass_arg.py │ ├── demo04_sleep.py │ ├── demo05_id.py │ ├── demo06_list_threads.py │ ├── demo07_terminate.py │ ├── demo08a_return_value.py │ ├── demo08b_return_value.py │ ├── demo09_detach.py │ ├── demo10_yield.py │ ├── demo11a_exec_service.py │ ├── demo11b_exec_service.py │ ├── demo11c01_exec_service.py │ ├── demo11c02_exec_service.py │ ├── demo12a_race_condition.py │ ├── demo12b01_data_race_single.py │ ├── demo12b02_data_race_multi.py │ ├── demo12c01_race_cond_data_race.py │ ├── demo12c02_race_cond_data_race.py │ ├── demo13a_mutex.py │ ├── demo14_synchronized_block.py │ ├── demo15a_deadlock.py │ ├── demo15b_deadlock.py │ ├── demo16_monitor.py │ ├── demo17a_reentrant_lock.py │ ├── demo17b_reentrant_lock.py │ ├── demo17c_reentrant_lock.py │ ├── demo18a01_barrier.py │ ├── demo18a02_barrier.py │ ├── demo18a03_barrier.py │ ├── demo18b01_latch.py │ ├── demo18b02_latch.py │ ├── demo19_read_write_lock.py │ ├── demo20a01_semaphore.py │ ├── demo20a02_semaphore.py │ ├── demo20a03_semaphore_deadlock.py │ ├── demo20b_semaphore.py │ ├── demo21a01_condition_variable.py │ ├── demo21a02_condition_variable.py │ ├── demo21a03_condition_variable.py │ ├── demo21b_condition_variable.py │ ├── demo22a_blocking_queue.py │ ├── demo22b_blocking_queue.py │ ├── demo23a_thread_local.py │ ├── demo23b_thread_local.py │ ├── demo24_volatile.py │ ├── demo25_atomic.py │ ├── demoex_event.py │ ├── demoex_timer.py │ ├── exer01a_max_div.py │ ├── exer01b_max_div.py │ ├── exer01c_max_div.py │ ├── exer02a01_producer_consumer.py │ ├── exer02a02_producer_consumer.py │ ├── exer02a03_producer_consumer.py │ ├── exer02a04_producer_consumer.py │ ├── exer02b01_producer_consumer.py │ ├── exer02b02_producer_consumer.py │ ├── exer02b03_producer_consumer.py │ ├── exer02b04_producer_consumer.py │ ├── exer02c_producer_consumer.py │ ├── exer03a_readers_writers.py │ ├── exer03b_readers_writers.py │ ├── exer04_dining_philosophers.py │ ├── exer05a_product_matrix_vector.py │ ├── exer05b_product_matrix_vector.py │ ├── exer06a_blocking_queue.py │ ├── exer06b01_blocking_queue.py │ ├── exer06b02_blocking_queue.py │ ├── exer07a_data_server.py │ ├── exer07b_data_server.py │ ├── exer07c_data_server.py │ ├── exer07d_data_server.py │ ├── exer08_exec_service_itask.py │ ├── exer08_exec_service_main.py │ ├── exer08_exec_service_v0a.py │ ├── exer08_exec_service_v0b.py │ ├── exer08_exec_service_v1a.py │ ├── exer08_exec_service_v1b.py │ ├── exer08_exec_service_v2a.py │ ├── exer08_exec_service_v2b.py │ ├── mylib_latch.py │ ├── mylib_rwlock.py │ └── mylib_rwlock2.py └── references.md