线程是否可以在同一进程中共享数据(全局变量)。
答案 0 :(得分:5)
答案 1 :(得分:2)
当然是。您只需要同步它们以避免死锁。在C#中使用lock
标记代码中的关键部分。检查MSDN以获取详细信息。 : - )
答案 2 :(得分:1)
同一程序中的多个线程可以共享数据。但是,您必须了解数据访问和写入的潜在问题。通常,这会在写入或尝试访问相同资源时出现读取问题。 [查看有关race condictions]
的更多信息答案 3 :(得分:1)
是的,无论是通过引用静态对象,公开提供跨线程的引用,还是通过跨线程编组(例如UI控件调用/调度调用,尽管这并不完全相同)。
虽然跨线程共享资源的同步绝对重要,但简单地提倡将锁(对象)作为一揽子方法并不一定适用于所有情况。如果您有两个线程,每个线程都锁定在另一个线程正在等待的共享对象上,那么您将陷入僵局,因此必须考虑设计和处理流程。
除非必要,否则不要锁定整个类,否则可能会提供不必要的开销并导致性能损失。对于需要同步的静态类,最好提供一个静态对象来锁定与共享状态交互的方法,而不是锁定整个类: 例如锁定(_staticLockObjectInstance)over lock(typeof(staticClass))
答案 4 :(得分:1)
答案 5 :(得分:0)
是。可能需要更多信息。
Object o = new Object();
int i; // Shared variable
lock(o)
{
// work with i.
}
答案 6 :(得分:0)
同一进程中线程的默认行为是共享全局存储。
如果您不想要共享存储,则环境会提供thread local storage。
如果您确实访问共享存储,那么您可能需要使用锁,原子操作或内存防护来同步对存储的访问。如果您忘记在代码的任何部分执行此操作,则可能会以不可预测的方式失败。