多线程更新数据库 死锁

haiancdp0503 2015-04-16 09:56:32
public void DoWord(object o)
{
string[] proxy = o as string[];
int _myIndex = Convert.ToInt32(proxy[2]);
//一直运行直到手动关闭
while (!m_boolCatchFinished)
{
//线程暂停
if (!ThreadList[_myIndex].boolStoped)
{
string[] ds = null;
//线程同步
Queue q = Queue.Synchronized(m_queueList);
if (q.Count > 0)
{
ds = q.Dequeue().ToString().Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
try
{
string html = RequestGet.GetResponseBody(ds[1].ToString(), proxy[0], Convert.ToInt32(proxy[1]), true);

//updata 同 一个表
UpdateProject(ds[0].ToString(), html);

m_intCatchCount++;
ShowText mi = new ShowText(SetTxt);
BeginInvoke(mi, new object[] { m_intCatchCount, _myIndex, "", Thread.CurrentThread.ManagedThreadId.ToString() });
}
catch (Exception ex)
{
ShowText mi = new ShowText(SetTxt);
BeginInvoke(mi, new object[] { m_intCatchCount, _myIndex, ex.Message, Thread.CurrentThread.ManagedThreadId.ToString() });
continue;

}
}
}
}
}

protected void UpdateProject(string id, string html)
{
using (SqlConnection conn = new SqlConnection(m_strConn))
{
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = "update nanjing_soufun_project set html=@html,catched=1 where id='" + id.ToString() + "'";
comm.Parameters.Add(new SqlParameter("@html", SqlDbType.NVarChar) { Value = html });
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
}

多线程时 更新 同一张表 会发生 死锁 请教下 原因

lock (ss)
{
//updata 同 一个表
UpdateProject(ds[0].ToString(), html);
}
这样之后就不会死锁
...全文
349 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiancdp0503 2015-04-16
  • 打赏
  • 举报
回复
只是一个 updata 为毛 会死锁~~
haiancdp0503 2015-04-16
  • 打赏
  • 举报
回复
数据库死锁~~
  • 打赏
  • 举报
回复
说清楚是程序死锁了,还是数据库死锁了啊……
bdmh 2015-04-16
  • 打赏
  • 举报
回复
lock (ss),ss是什么,是全局的object吗,估计你还是没有控制好线程的同步,必须更新完后,在执行下一个线程,否则就会造成数据库自身的死锁

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧