这是线程安全的,对吗?

只是检查一下\u计数正在安全访问,对吗

这两种方法都由多个线程访问

私有整数计数;
公共作废检查工作(){
如果(_count>=最大值)返回;
联锁增量(参考计数);
Task t=Task.Run(()=>Work());
t、 与(已完成的工作处理程序)继续;
}
public void CompletedWorkHandler(任务completedTask){
联锁减量(参考计数);
//处理错误等。。。
}

这是线程安全的,对吗

假设最大值为1,计数为零,五个线程调用CheckForWork

所有五个线程都可以验证计数是否小于最大值。然后计数器将增加到五个,五个工作将开始

这似乎与守则的意图背道而驰

此外,该字段不是易变的。那么,什么机制可以保证任何线程都能在无内存障碍路径上读取最新值呢?没有什么能保证!只有当条件为false时,才能设置内存屏障

更一般地说:你们在这里制造一个虚假的经济。使用低锁解决方案可以节省无争用锁所需的十几纳秒就拿着锁。你可以承受额外的十几纳秒

更一般地说:不要编写低锁代码,除非您是处理器体系结构方面的专家,并且了解允许CPU在低锁路径上执行的所有优化。你不是这样的专家。我也不是。这就是为什么我不写低锁代码的原因

发表评论