该程序是一个消息海报应用程序,可以将行发布到站点,因为它应该很快,所以我不得不使用多线程。但问题是线程数可以从 10 到 100,所以如果线程数很高2 个线程占用同一行的可能性成为可能。我怎样才能避免它?我只是想看看用相同 ID 发布的最多 11 行,这是不可能的,除了我上面假设的......
我采取行的方式如下:
1- 从数据库创建数据集....
2-创建计数器,rowCounter = 0
while (rowCounter < allPostingRows.Tables[0].Rows.Count)
{
// Take rows, and increment rowcounter++
// Takes row according to row counter....
// get the value from the fields in dataset and run the function:
postFunction(userName, pass, postUrl, rowCounter, worker, postTitle, postText, postTxtSnippet, groupID, dbID, postON, groupName, groupUrl);
}
因此,如果在开始时我说 100 个线程来运行它,则 100 个线程进入此代码,每个线程占用一行并发布,当一个线程发布并且空闲时,检查rowcounter
, 并占用另一行。
所以我正在使用上述逻辑为线程提供不同的行。这种方法是否不好,因为我想不出任何其他方法!还假设多个线程占用相同的行,我该如何解决?
更新
我能想到的一种解决方案是在所有工作完成后随机延迟,线程去获取可能有帮助的新行?
用户回答后更新如下:
所以我的代码应该是这样的:
private Object thisLock = new Object();
lock (thisLock)
{
while (rowCounter < allPostingRows.Tables[0].Rows.Count)
{
// Take rows, and increment rowcounter++
// Takes row according to row counter....
// get the value from the fields in dataset and run the function:
postFunction(userName, pass, postUrl, rowCounter, worker, postTitle, postText, postTxtSnippet, groupID, dbID, postON, groupName, groupUrl);
}
}