Skip to content

Instantly share code, notes, and snippets.

View JohnMGant's full-sized avatar

Michael Gant JohnMGant

View GitHub Profile
internal class QueuingAdder : IIntegerAdder
{
public int Add(int[] values)
{
var queue = new Queue<int>(values);
var sum = 0;
while (queue.TryDequeue(out int value))
{
sum += value;
}
internal class ParallelAdder : IIntegerAdder
{
public int Add(int[] values)
{
var queue = new ConcurrentQueue<int>(values);
int overallSum = 0;
Action addFromQueue = () =>
{
int localSum = 0;
while (queue.TryDequeue(out int localValue))
internal class ConcurrentBatchAdder : IIntegerAdder
{
private const int degreeOfParallelism = 4;
public int Add(int[] values)
{
var countPerSegment = values.Length / degreeOfParallelism + 1;
int[,] segments = SplitIntoSegments(values, countPerSegment);
var sums = new int[degreeOfParallelism];