我需要锁定一个对象(集合),执行一些操作并调用一个使用ThreadPool(在同一锁定块内)打开线程的函数。
我的问题是,在新线程内执行的操作是否仍被认为是线程安全的?
最佳答案
您可能会在线程完成其工作之前释放该锁,除非您等待它退出。
lock(collection){
DoSomeWork();
LaunchNewThread(); => newThread starts
} => the lock will likely be released BEFORE newThread ends
因此,在释放锁之前,您必须等待newThread完成。理想的解决方案是在newThread中执行所有操作(锁定和DoSomeWork)。如果不可能,则可以创建另一个锁定的线程,然后等待newThread结束:
anotherThread{
lock(collection){
DoSomeWork();
LaunchNewThread();
newThread.JOIN(); => execution will stop until newThread finishes
} => the lock will be released AFTER newThread returns
}
关于c# - 锁内的新线程-C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21428298/