【发布时间】:2015-06-14 21:43:30
【问题描述】:
我在我的应用程序中使用线程
我正在创建一个文件夹,但该文件夹尚不存在
if (!ExistingFolders.Contains(currentFolder)){
if (lastCreatedFolder != folder) {
lastCreatedFolder = folder;
CreateNewFolder(context, siteLink, lName, fName);
}
}
当有 5 个线程并行运行时,这种情况是行不通的!! 例如,所有 5 个线程都试图创建一个名为“New”的文件夹 第一个正在创建,而其余的则抛出“文件夹已存在”错误,因为它已经创建了
在这种情况下如何检查情况?
这里所有 5 个线程都在并行运行,并且条件对于所有情况都为真,而只有第一种情况应该为真
【问题讨论】:
-
你有什么问题?
-
这是一个众所周知的问题。只需处理错误。
-
为什么线程需要创建文件夹。在主线程中创建它,并在线程执行终止后,如果它无用则将其删除。您正在将完美的同步 io 操作推送到多个线程,并通过使用锁定来解决他们不想解决的问题来显着降低它们的性能。在您的架构中找到一种方法来尽可能避免锁定。
标签: c# .net multithreading