一个纠结我好多天c#锁的问题,哪位大神帮忙解决一下? 老板给这样一个思路,用你两个锁lock1,lock2中分别写数据到数据库和从数据库读数据,有两个标志flag1、flag2,flag1限制lock2,flag2限制lock1,用这种方法解决两个线程互斥,我没太想明白,求教!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private DataSet ds = new DataSet(); static int flag1; static int flag2; public void write() //写数据 { lock (syncRoot) { if (flag2 == 0) { flag1 = 1; //执行写操作 //********** //向dt中写数据 //********** flag1 = 0; } if (flag2 == 1) { flag1 = 1; } } } public void read() //读数据 { lock (syncRoot) { for (int i = 0; i < dt.Rows.Count; i++) { if (flag1 == 0) { flag2 = 1; //******* // 读数据 //******* //读完后判断是否还有读取任务,如有任务sleep(500); Thread.Sleep(500); } if (flag1 == 1) { //********* //整理数据 //********* flag2 = 0; //************************** //结束本次循环,进入下一循环 //************************** continue; } } } } lock(ds){ ......}一个就够了。 可以直接lock一个dataset吗?那我怎样处理数据? 如果是为了实现线程同步或者数据库读写操作同步,那么只需要一个lock就够了。另外被锁的flag应定义为static const类型。private static const object flag = new object();位置1:写数据库:lock(flag){ writeDB();}位置2:读数据库lock(flag){ readDB();} 不知道这个行不行呢 _RWLock.EnterWriteLock(); try { writeDB(); } finally { _RWLock.EnterWriteLock(); } _RWLock.EnterReadLock(); try { readDB(); } finally { _RWLock.ExitReadLock(); } Select count(*) 的怪问题 datagridview中的cell的readonly属性设置后还是可编辑。。。 vs2003的VAssistX是做什么的???大家说的详细点。 求一个获取最大磁盘空闲空间的函数 我一直在想这个有没别的写法呢? 设置DGV的行的不同颜色报错,高手指导 sendkey.send方法为什么没有反映? 请高手指点!下载页面怎么消除???点击下载总出现空页面,怎么办?附源码!!急等!!! 这是个什么控件? 在执行大循环的时候怎么通过取消按钮取消循环啊 采集ASPX网站翻页的数据(dopostback方式) 怎么把图片的空白处切掉
private DataSet ds = new DataSet(); static int flag1;
static int flag2; public void write() //写数据
{ lock (syncRoot)
{
if (flag2 == 0)
{ flag1 = 1; //执行写操作
//**********
//向dt中写数据
//**********
flag1 = 0; }
if (flag2 == 1)
{
flag1 = 1;
}
}
} public void read() //读数据
{
lock (syncRoot)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (flag1 == 0)
{
flag2 = 1;
//*******
// 读数据
//*******
//读完后判断是否还有读取任务,如有任务sleep(500);
Thread.Sleep(500); } if (flag1 == 1)
{
//*********
//整理数据
//*********
flag2 = 0;
//**************************
//结束本次循环,进入下一循环
//**************************
continue;
}
}
}
}
{
......
}
一个就够了。
如果是为了实现线程同步或者数据库读写操作同步,那么只需要一个lock就够了。另外被锁的flag应定义为static const类型。
private static const object flag = new object();
位置1:写数据库:
lock(flag)
{
writeDB();
}
位置2:读数据库
lock(flag)
{
readDB();
}
_RWLock.EnterWriteLock();
try
{
writeDB();
}
finally
{
_RWLock.EnterWriteLock();
} _RWLock.EnterReadLock();
try
{
readDB();
}
finally
{
_RWLock.ExitReadLock();
}