为了账号安全,请及时绑定邮箱和手机立即绑定

.net多线程计算hash值的问题

.net多线程计算hash值的问题

料青山看我应如是 2018-11-21 10:13:31
测试环境vs2010 + .net 4.0 下面这段代码经常报:“已关闭 Safe handle”或者“哈希不适于在指定状态下使用”错误,请问下是什么原因造成的?class Program{    static void Main(string[] args)    {        Parallel.For(0, 100, n =>        {            Console.WriteLine(SetMd5("test"));        });    }    private static HashAlgorithm hash = MD5.Create();    public static String SetMd5(String text)    {        //HashAlgorithm hash = MD5.Create();        Byte[] bytes = hash.ComputeHash(Encoding.UTF8.GetBytes(text));        return BitConverter.ToString(bytes).Replace("-","");    }}
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

又是一个线程安全的问题。没线程安全。

查看完整回答
反对 回复 2018-11-25
?
茅侃侃

TA贡献1842条经验 获得超21个赞

Parallel.For(0, 100, n =>
        {

            HashAlgorithm hash = MD5.Create();

            Byte[] bytes = hash.ComputeHash(Encoding.UTF8.GetBytes("test"));
            Console.WriteLine(BitConverter.ToString(bytes).Replace("-",""));
        });

如果你这么写没有出错的话,那么可以断定 HashAlgorithm 的 ComputeHash 不是线程安全的。因此你的代码在调用同一个

HashAlgorithm 实例的 ComputeHash 方法时要考虑互斥问题。


查看完整回答
反对 回复 2018-11-25
  • 2 回答
  • 0 关注
  • 683 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信