gpt4 book ai didi

multithreading - 如何测试添加到哈希表的线程安全性?

转载 作者:行者123 更新时间:2023-11-28 20:34:02 25 4
gpt4 key购买 nike

我们使用哈希表在网络服务中存储 session 。我想测试添加到此 session 的线程安全性。我编写了一个控制台应用程序,它生成大量线程并添加到此 session 中。但我既没有异常(exception)也没有丢失任何数据。我是不是做错了什么,或者这么多的操作不是对哈希表的威胁吗?!

  • key 是随机生成的。
  • 在这个哈希表上完成的操作非常简单:添加、删除、ContainsKey、[](获取条目),有时更新条目的值 - 没有 foreach 或循环。

    private const int Threads = 10000;
    private const int SleepLimit = 10000;


    public static void Main(string[] args)
    {
    try
    {
    Console.WriteLine("Application Started.");


    <pre><code> Thread[] threads = new Thread[Threads];
    for (int i = 0; i &lt; threads.Length; i++)
    threads[i] = CreateThread();


    Console.WriteLine("All Threads Started.");


    foreach (Thread t in threads)
    t.Join();


    Console.WriteLine("All Threads Joined.");
    }
    catch (Exception ex)
    {
    Console.WriteLine("Exception occurred: " + ex.Message);
    Console.ReadLine();
    }
    </code></pre>

    }


    private static Thread CreateThread()
    {
    Thread thread = new Thread(UserFunction);
    thread.Start();
    return thread;
    }


    private static void UserFunction()
    {
    Thread.Sleep(_random.Next(SleepLimit));
    SessionManagement.AddSession("Test");
    }


    public static void AddSession(string session)
    {
    ulong hash = NextHashValue();
    while (_sessionPool.ContainsKey(hash))
    {
    Console.WriteLine(string.Format("Duplicate Session Key: {0}-PoolSize: {1}",
    hash, _sessionPool.Count);


    <pre><code> hash = NextHashValue();
    }


    _sessionPool.Add(hash, session);


    if (!_sessionPool.ContainsKey(hash))
    Console.WriteLine("Race problem occurred - Session Key: " + hash);
    </code></pre>

    }

最佳答案

我不确定您为什么要费这么大的劲来验证对 Hashtable 的并发写入是否会使您的应用程序崩溃。

即使您的测试应用程序安全运行了很长时间,您也不应部署无法保护您的 Hashtable 免受与其他读取或写入操作并发写入的代码。

10000 个线程是一个非常大的数字,顺便说一句 - 我希望您的生产应用程序不打算使用这么多线程。

关于multithreading - 如何测试添加到哈希表的线程安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com