Skip to content

Commit 25ea2bd

Browse files
authored
Optimize ConcurrentLru read throughput (#645)
* rem volatile * ckd ---------
1 parent aeae236 commit 25ea2bd

File tree

7 files changed

+19
-8
lines changed

7 files changed

+19
-8
lines changed

BitFaster.Caching/Lru/AfterAccessPolicy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public LongTickCountLruItem<K, V> CreateItem(K key, V value)
4040
public void Touch(LongTickCountLruItem<K, V> item)
4141
{
4242
item.TickCount = this.time.Last;
43-
item.WasAccessed = true;
43+
item.MarkAccessed();
4444
}
4545

4646
///<inheritdoc/>

BitFaster.Caching/Lru/DiscretePolicy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void Touch(LongTickCountLruItem<K, V> item)
3535
var currentExpiry = new Duration(item.TickCount - this.time.Last);
3636
var newExpiry = expiry.GetExpireAfterRead(item.Key, item.Value, currentExpiry);
3737
item.TickCount = this.time.Last + newExpiry.raw;
38-
item.WasAccessed = true;
38+
item.MarkAccessed();
3939
}
4040

4141
///<inheritdoc/>

BitFaster.Caching/Lru/LruItem.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class LruItem<K, V>
1414
{
1515
private V data;
1616

17-
private volatile bool wasAccessed;
18-
private volatile bool wasRemoved;
17+
private bool wasAccessed;
18+
private bool wasRemoved;
1919

2020
// only used when V is a non-atomic value type to prevent torn reads
2121
private int sequence;
@@ -85,6 +85,17 @@ public bool WasRemoved
8585
set => this.wasRemoved = value;
8686
}
8787

88+
/// <summary>
89+
/// Marks the item as accessed, if it was not already accessed.
90+
/// </summary>
91+
public void MarkAccessed()
92+
{
93+
if (!this.wasAccessed)
94+
{
95+
this.wasAccessed = true;
96+
}
97+
}
98+
8899
internal V SeqLockRead()
89100
{
90101
var spin = new SpinWait();

BitFaster.Caching/Lru/LruPolicy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public LruItem<K, V> CreateItem(K key, V value)
2323
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2424
public void Touch(LruItem<K, V> item)
2525
{
26-
item.WasAccessed = true;
26+
item.MarkAccessed();
2727
}
2828

2929
///<inheritdoc/>

BitFaster.Caching/Lru/TLruLongTicksPolicy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public LongTickCountLruItem<K, V> CreateItem(K key, V value)
3838
[MethodImpl(MethodImplOptions.AggressiveInlining)]
3939
public void Touch(LongTickCountLruItem<K, V> item)
4040
{
41-
item.WasAccessed = true;
41+
item.MarkAccessed();
4242
}
4343

4444
///<inheritdoc/>

BitFaster.Caching/Lru/TlruDateTimePolicy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public TimeStampedLruItem<K, V> CreateItem(K key, V value)
3535
[MethodImpl(MethodImplOptions.AggressiveInlining)]
3636
public void Touch(TimeStampedLruItem<K, V> item)
3737
{
38-
item.WasAccessed = true;
38+
item.MarkAccessed();
3939
}
4040

4141
///<inheritdoc/>

BitFaster.Caching/Lru/TlruTicksPolicy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public TickCountLruItem<K, V> CreateItem(K key, V value)
4040
[MethodImpl(MethodImplOptions.AggressiveInlining)]
4141
public void Touch(TickCountLruItem<K, V> item)
4242
{
43-
item.WasAccessed = true;
43+
item.MarkAccessed();
4444
}
4545

4646
///<inheritdoc/>

0 commit comments

Comments
 (0)