假设我有一个非易失性的int字段,以及一个它Interlocked.Increment
的线程.另一个线程可以直接安全地读取它,还是读取也需要互锁?
我以前认为我必须使用互锁读取来保证我看到当前值,因为毕竟,该字段不是易失性的.我一直在Interlocked.CompareExchange(int, 0, 0)
努力实现这一目标.
但是,我偶然发现了这个答案,这表明实际的普通读取总会看到Interlocked.Increment
ed值的当前版本,并且因为int读取已经是原子的,所以不需要做任何特殊的事情.我还发现了Microsoft拒绝Interlocked.Read(ref int)请求的请求,进一步表明这完全是多余的.
那么我能真正安全地阅读这样一个int
领域的最新价值Interlocked
吗?
我通过实现runnable接口创建了类,然后在我的项目的其他一些类中创建了许多线程(将近10个).
如何阻止其中一些线程?
此外,正在设置的对象是否必须是线程安全的,以保证我们知道会话中存储的对象的状态是什么.
此外,我正在网上阅读一些建议使用:
synchronized(session) {
session.setAttribute("abc", "abc");
}
Run Code Online (Sandbox Code Playgroud)
这是一个有效的建议吗?
我想知道DbContext
该类是否是线程安全的,我假设它不是,因为我正在执行并行访问DbContext
我的应用程序中的并行线程,我得到了许多锁定异常和其他看起来可能与线程相关的东西.
直到最近我还没有收到任何错误...但直到最近我还没有访问DbContext
线程.
如果我是对的,人们会建议什么作为解决方案?
int
Java中的volatile是否是线程安全的?也就是说,可以安全地读取和写入而不锁定吗?
我想知道Python内置容器(list,vector,set ...)是否是线程安全的?或者我是否需要为共享变量实现锁定/解锁环境?
是否存在任何通用方法或规则出口,通过这些方式或规则可以确保在任何应用程序的各种Utility类中专门使用的静态方法的线程安全性.在这里,我想特别指出Web应用程序的线程安全性.
众所周知,使用不可变对象作为参数的静态方法是线程安全的,而可变对象则不是.
如果我有一个实用程序方法进行某些操作java.util.Date
并且该方法接受一个实例java.util.Date
,那么这个方法就不是线程安全的.那么如何在不改变参数传递方式的情况下使其线程安全?
public class DateUtils {
public static Date getNormalizeDate(Date date) {
// some operations
}
}
Run Code Online (Sandbox Code Playgroud)
这类是javax.faces.context.FacesContext
可变的吗?将此类的实例传递给此类静态实用程序方法是否安全?
这个类的列表,其实例可以作为参数传递或不能作为参数传递,可能很长; 那么在编写此类实用程序类的代码时,我们应该记住哪些要点?
到目前为止,我收集的事实尚无定论:
你有什么经历?
特别是
我知道如何管理线程等.我很想知道这是否是线程安全的做事方式.
class Program
{
// bogus object
class SomeObject
{
private int value1;
private int value2;
public SomeObject(int value1, int value2)
{
this.value1 = value1;
this.value2 = value2;
}
}
static void Main(string[] args)
{
var s = new SomeObject[10];
var threads = Environment.ProcessorCount - 1;
var stp = new SmartThreadPool(1000, threads, threads);
for (var i = 0; i < 10; i++)
{
stp.QueueWorkItem(CreateElement, s, i);
}
}
static void CreateElement(SomeObject[] s, int index)
{ …
Run Code Online (Sandbox Code Playgroud) 除了Concurrent Collections是命名空间还是一个类之外,命名空间中SynchronizedCollection<T>
的并发集合如何System.Collections.Concurrent
相互不同SynchronizedCollection<T>
?
SynchronizedCollection<T>
并发集合中的所有类都提供了线程安全的集合.我如何决定何时使用其中一个,为什么?
c# collections .net-4.0 thread-safety concurrent-collections
thread-safety ×10
c# ×4
java ×4
.net ×1
.net-4.0 ×1
arrays ×1
collections ×1
oop ×1
php ×1
python ×1
session ×1
synchronized ×1
utility ×1
volatile ×1