1
A
回答
2
在线程完成其作业之前,您可能会释放锁定,除非您等待它退出。
lock(collection){
DoSomeWork();
LaunchNewThread(); => newThread starts
} => the lock will likely be released BEFORE newThread ends
因此,您必须等待newThread在释放锁之前完成。理想的解决方案是在newThread内部完成所有任务(锁定和DoSomeWork)。如果这是不可能的,你可以创建另一个线程锁,并等待FOT newThread结束:
anotherThread{
lock(collection){
DoSomeWork();
LaunchNewThread();
newThread.JOIN(); => execution will stop until newThread finishes
} => the lock will be released AFTER newThread returns
}
+0
谢谢!这有很大帮助 –
2
1
看看我的帖子在这里: http://pilpag.blogspot.dk/2016/04/advanced-programming-easy-way-to-manage.html
总之,使用此代码: 公共类LockContainer { private BlockingCollection lockItems {get;组; }
private object LocalLockItem { get; set; }
public LockContainer()
{
lockItems = new BlockingCollection<object>();
LocalLockItem = new object();
}
public object GetLockItem(string str)
{
lock (LocalLockItem)
{
if (!lockItems.Any(li => (string)li == str))
{
lockItems.Add(str);
}
return lockItems.First(li => (string)li == str);
}
}
}
相关问题
- 1. C#线程死锁
- 2. C++线程死锁
- 3. C读者作家线程锁解锁
- 4. C#线程 - 锁对象
- 5. C#线程锁定失败
- 6. C#线程和锁定
- 7. 主线程锁定在C#
- 8. 锁定资源(线程,C++)
- 9. 在C中锁定线程#
- 10. C#多线程 - 锁定
- 11. C++ 11线程的RW锁
- 12. 线程锁定与创建新对象
- 13. Java线程锁
- 14. 线程和锁
- 15. Task.Delay内线程C#
- 16. 如何测试锁内等待线程
- 17. 线程执行内循环锁
- 18. 无锁线程池
- 19. 打开新的EntityManager后线程锁定
- 20. 移交锁定的std :: unique_lock新线程
- 21. C#新的线程
- 22. C#WIA传输方法锁UI线程
- 23. 在C#中处理线程(死锁)
- 24. C#线程锁定一类的2场
- 25. 带锁定的C#线程池
- 26. C#+线程+串行端口+锁
- 27. 在C#中锁定Web窗体线程#
- 28. C:线程之间的文件锁定
- 29. C++:如何简化线程锁定?
- 30. C#中的线程死锁例子#
http://blogs.msdn.com/b/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe.aspx –
有趣的帖子,谢谢LB –