Record write-once initialization and report whether later reads were locked out.

Lazy Init Coordination Report

LazyInitCoordinationReport.cs
using System;

class Program
{
    static int builds = 0;

    static int Build()
    {
        builds++;
        return 7;
    }

    static void Main()
    {
        int reads = ;
        var slot = new Lazy<int>(Build);
        int served = 0;

        for (int i = 0; i < reads; i++)
        {
            int value = slot.Value;
            served++;
        }

        bool created = slot.IsValueCreated;

        string status;
        if (!created)
        {
            status = "unset";
        }
        else if (served <= 1)
        {
            status = "set";
        }
        else
        {
            status = "locked";
        }

        Console.WriteLine("reads=" + reads + " served=" + served + " builds=" + builds + " " + status);
    }
}
using System;

class Program
{
    static int builds = 0;

    static int Build()
    {
        builds++;
        return 7;
    }

    static void Main()
    {
        int reads = ;
        var slot = new Lazy<int>(Build);
        int served = 0;

        for (int i = 0; i < reads; i++)
        {
            int value = slot.Value;
            served++;
        }

        bool created = slot.IsValueCreated;

        string status;
        if (!created)
        {
            status = "unset";
        }
        else if (served <= 1)
        {
            status = "set";
        }
        else
        {
            status = "locked";
        }

        Console.WriteLine("reads=" + reads + " served=" + served + " builds=" + builds + " " + status);
    }
}
using System;

class Program
{
    static int builds = 0;

    static int Build()
    {
        builds++;
        return 7;
    }

    static void Main()
    {
        int reads = ;
        var slot = new Lazy<int>(Build);
        int served = 0;

        for (int i = 0; i < reads; i++)
        {
            int value = slot.Value;
            served++;
        }

        bool created = slot.IsValueCreated;

        string status;
        if (!created)
        {
            status = "unset";
        }
        else if (served <= 1)
        {
            status = "set";
        }
        else
        {
            status = "locked";
        }

        Console.WriteLine("reads=" + reads + " served=" + served + " builds=" + builds + " " + status);
    }
}
write-once value A coordination report can record write-once initialization. A `Lazy<int>` runs its build function the first time the value is read and caches the result, so later reads are served from the cached value and never build again. The build count stays at one however many times the value is read. The status line summarizes whether the slot stayed unset, was set by a single read, or stayed locked at one build while later reads were served.