Melaksanakan HashSet serentak dalam Rangka Kerja .NET?
Pengenalan:
Rangka Kerja .NET tidak menyediakan pelaksanaan terbina dalam HashSet serentak, yang boleh menjadi cabaran bagi pembangun yang bekerja dengan struktur data serentak. Artikel ini meneroka keperluan untuk HashSet serentak dan mengkaji pelbagai cara untuk melaksanakan akses selamat benang kepada HashSet dalam Rangka Kerja .NET.
Pelaksanaan keselamatan urutan tersuai:
Satu pendekatan ialah mencipta pelaksanaan HashSet selamat benang tersuai. Ini boleh dicapai dengan membungkus HashSet sedia ada dalam mekanisme penyegerakan (seperti kunci). Coretan kod berikut menunjukkan pelaksanaan ini:
<code class="language-C#">public class ConcurrentHashSet<T>
{
private readonly HashSet<T> _hashSet = new HashSet<T>();
private readonly object _syncRoot = new object();
public bool Add(T item)
{
lock (_syncRoot)
{
return _hashSet.Add(item);
}
}
public bool Remove(T item)
{
lock (_syncRoot)
{
return _hashSet.Remove(item);
}
}
// 其他操作可以类似地实现
}</code>
Gunakan ConcurrentDictionary:
Pendekatan lain ialah menggunakan kelas ConcurrentDictionary dalam ruang nama System.Collections.Concurrent. Walaupun ia tidak menyediakan fungsi yang sama seperti HashSet, ia menyediakan kamus selamat benang dengan semantik yang serupa. Dengan menggunakan pasangan nilai kunci (dengan kunci ialah elemen dalam HashSet dan nilai adalah nilai tiruan) kita boleh mencapai pelaksanaan serentak:
<code class="language-C#">private ConcurrentDictionary<T, byte> _concurrentDictionary = new ConcurrentDictionary<T, byte>();
public bool Add(T item)
{
byte dummyValue = 0;
return _concurrentDictionary.TryAdd(item, dummyValue);
}
public bool Remove(T item)
{
byte dummyValue;
return _concurrentDictionary.TryRemove(item, out dummyValue);
}
// 其他操作可以类似地实现</code>
Nota:
Apabila memilih kaedah, pertimbangkan faktor berikut:
-
Keselamatan Concurrency: Kedua-dua kaedah menyediakan akses selamat benang kepada struktur data asas.
-
Prestasi: Dalam sesetengah kes, pelaksanaan tersuai mungkin mempunyai prestasi yang lebih baik daripada ConcurrentDictionary.
-
Kesederhanaan: ConcurrentDictionary menyediakan pelaksanaan yang lebih mudah dan langsung.
Kebolehgunaan -
HashSet: ConcurrentDictionary tidak mewarisi daripada HashSet, jadi sesetengah HashSet-fungsi tertentu mungkin hilang.
Kesimpulan:
Keperluan untuk HashSets serentak dalam Rangka Kerja .NET boleh diselesaikan dengan melaksanakan pembalut selamat benang tersuai atau menggunakan ConcurrentDictionary. Pilihan antara kedua-duanya bergantung pada keperluan khusus aplikasi dan pertukaran yang dinyatakan di atas.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan HashSet Serentak dalam Rangka Kerja .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn