Ali*_*ile 4 c# multithreading locking
我不确定锁是如何工作的.
如果我有一个List<T> list和两个线程会发生什么?
如果thread1首先开始运行并枚举该列表会发生什么
foreach(T t in list)
{
// code
}
Run Code Online (Sandbox Code Playgroud)
并且在同一时间,但在thread1启动后,thread2将锁定列表
lock(list)
{
// code
}
Run Code Online (Sandbox Code Playgroud)
我使用ThreadPooldo进行一些处理,我需要知道锁是如何工作的,如果是线程安全的
ThreadPool.QueueUserWorkItem(new WaitCallback(method), obj);
Run Code Online (Sandbox Code Playgroud)
在编写的代码中 - 枚举器将继续运行.关键lock是你的所有代码都需要同意.如果你曾经使用过:
lock(list)
{
foreach(T t in list)
{
// code
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当你的另一个线程尝试获取锁时,它将在第一个线程后面排队 - 等待第一个线程释放锁(通过退出lock(Monitor.Exit)或调用Monitor.Wait).