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 –