blob: e1ef8c117c7bd1532f2399d7e1379eee896d4eed (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
using System;
using System.Threading;
namespace Org.BouncyCastle.Utilities
{
public static class Objects
{
public static int GetHashCode(object obj)
{
return null == obj ? 0 : obj.GetHashCode();
}
internal static TValue EnsureSingletonInitialized<TValue, TArg>(ref TValue value, TArg arg,
Func<TArg, TValue> initialize)
where TValue : class
{
TValue currentValue = Volatile.Read(ref value);
if (null != currentValue)
return currentValue;
TValue candidateValue = initialize(arg);
return Interlocked.CompareExchange(ref value, candidateValue, null) ?? candidateValue;
}
}
}
|