多个线程在并发字典中一次访问和修改不同的元素

时间:2017-11-09 12:00:44

标签: c# multithreading dictionary concurrency .net-4.5

我在多线程环境中使用并发字典dict<string, list<CustomObjects>>

多个线程正在访问同一个字典,仅使用唯一键检索和修改项目。我的意思是虽然有多个线程访问字典,但每个线程只访问并修改唯一键的元素。

在任何时候都不会出现多个线程试图在同一个密钥位置访问和修改元素的情况。

现在我的问题是,即使在这种情况下发生内部锁定?或者由于不同的线程一次在同一个字典上访问不同的元素,没有内部锁定或任何并发机制执行?

我相信如果多个线程试图在同一个密钥位置修改元素,默认情况下会执行锁定并确保并发性。但是如果不同的线程正在访问字典中的不同项,那么它是否会在内部以无锁方式完成?

1 个答案:

答案 0 :(得分:-4)

密钥的值对您是否获得锁定没有影响。 func touchIDAuthentication() { let context = LAContext() var error:NSError? // edit line - deviceOwnerAuthentication guard context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) else { //showAlertViewIfNoBiometricSensorHasBeenDetected() return } // edit line - deviceOwnerAuthentication if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &errorPointer) { // edit line - deviceOwnerAuthentication context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason, reply: { (success, error) in if success { DispatchQueue.main.async { print("Authentication was successful") } }else { DispatchQueue.main.async { //self.displayErrorMessage(error: error as! LAError ) print("Authentication was error") } } }) }else { // self.showAlertWith(title: "Error", message: (errorPointer?.localizedDescription)!) } } 基本上是ConcurrentDictionary<,>的包装器,带有围绕写操作的锁

编辑:我的立场得到了纠正。内部工作并不像我想象的那么简单。我应该在大声说出之前咨询手册;)