Test results in exercise 1:

TEST SERIES: 1 producers 1 consumers
Test WarehouseWithMonitor unfair
Total time: 2693 ms
Test WarehouseWithSemaphore unfair
Total time: 2244 ms
Test WarehouseWithSemaphore fair
Total time: 2289 ms
Test WarehouseWithLockCondition unfair
Total time: 2388 ms
Test WarehouseWithLockCondition fair
Total time: 7073 ms

TEST SERIES: 5 producers 5 consumers
Test WarehouseWithMonitor unfair
Total time: 4055 ms
Test WarehouseWithSemaphore unfair
Total time: 3054 ms
Test WarehouseWithSemaphore fair
Total time: 3936 ms
Test WarehouseWithLockCondition unfair
Total time: 6493 ms
Test WarehouseWithLockCondition fair
Total time: 7739 ms

TEST SERIES: 1 producers 10 consumers
Test WarehouseWithMonitor unfair
Total time: 7938 ms
Test WarehouseWithSemaphore unfair
Total time: 2611 ms
Test WarehouseWithSemaphore fair
Total time: 3488 ms
Test WarehouseWithLockCondition unfair
Total time: 5231 ms
Test WarehouseWithLockCondition fair
Total time: 11086 ms

TEST SERIES: 100 producers 100 consumers
Test WarehouseWithMonitor unfair
Total time: 8475 ms
Test WarehouseWithSemaphore unfair
Total time: 3544 ms
Test WarehouseWithSemaphore fair
Total time: 4680 ms
Test WarehouseWithLockCondition unfair
Total time: 7094 ms
Test WarehouseWithLockCondition fair
Total time: 8481 ms

Legend:
fair = FIFO
unfair = random, no FIFO

Result:
We can see pure, unfair semaphores are fasted because they're pretty
"low-level". Monitor is genereally slower then semaphores or
lock&condition, but argueably easier to use.