pba*_*aga 15 .net c# language-agnostic multithreading thread-safety
有很多文章和讨论解释了为什么构建线程安全类是好的.据说如果多个线程同时访问例如一个字段,则只会产生一些不良后果.那么,保持非线程安全代码的重点是什么?我主要关注.NET,但我认为主要原因不依赖于语言.
例如,.NET静态字段不是线程安全的.如果默认情况下它们是线程安全的,结果会是什么?(无需执行"手动"锁定).使用(实际上默认为)非线程安全有什么好处?
我想到的一件事是性能(更多的是猜测).这是相当直观的,当函数或字段不需要是线程安全的时,它不应该是.但问题是:为什么?线程安全只是您需要实现的额外数量的代码吗?在什么情况下我可以100%确定例如一个字段不会被两个线程同时使用?
And*_*rey 15
编写线程安全代码:
但!并不总是需要线程安全的代码.如果您可以确定只有一个线程可以访问某些代码,则上面的列表会变得庞大且不必要的开销.这就像在去邻居城市的时候租一辆面包车,当你有两个人并没有多少行李时.
线程安全不是"是"或"否"的主张."线程安全"的含义取决于上下文; 这是否意味着"并发读安全,并发写不安全"?这是否意味着应用程序可能只返回陈旧数据而不是崩溃?它可能意味着许多事情.
不使类"线程安全"的主要原因是成本.如果多个线程不能访问该类型,那么投入工作并增加维护成本就没有优势.