Synchronized

Synchronisation in .NET– Part 4:
Partitioned Data Structures

In this final instalment of the synchronisation series, we will look at fully scalable solutions to the problem first stated in Part 1 – adding monitoring that is scalable and minimally intrusive. Thus far, we have seen how there is an upper limit on how fast you can access cache lines shared between multiple cores. […]

Continue reading…

Synchronized

Synchronisation in .NET– Part 3:
Spin Locks and Interlocks/Atomics

In the previous instalments (Part 1 and Part 2) of this series, we have drawn some conclusions about both .NET itself and CPU architectures. Here is what we know so far: When there is contention on a single cache line, the lock() method scales very poorly and you get negative scale the moment you leave […]

Continue reading…