public class BookShoop
{
public int num = 10;//共享资源
public void Sale()
{
int tmp;
lock (this) //同步控制
{
tmp = num;
if (tmp > 0)
{
//卖书过程
Thread.Sleep(1000);
num = num - 1;
Console.WriteLine("售出一本");
}
else
{
Console.WriteLine("没有了");
}
}
} }
class Program
{
static void Main(string[] args)
{
BookShoop a = new BookShoop();
Thread t1 = new Thread(new ThreadStart(a.Sale));
Thread t2 = new Thread(new ThreadStart(a.Sale));
t1.Start();
t2.Start();
}
}两个售货员,共卖一本书,这本书一共有十本,卖完为止,我两个售货员开了两个线程,共用一个变量,变量表示还剩几本书,可是程序每次只运行两次,即每个线程只运行一次,程序就退出了,也就是只卖了两本书,为什么,求高人回答,并把程序改对.
{
public int num = 10;//共享资源
public void Sale()
{
int tmp;
lock (this) //同步控制
{
tmp = num;
if (tmp > 0)
{
//卖书过程
Thread.Sleep(1000);
num = num - 1;
Console.WriteLine("售出一本");
}
else
{
Console.WriteLine("没有了");
}
}
} }
class Program
{
static void Main(string[] args)
{
BookShoop a = new BookShoop();
Thread t1 = new Thread(new ThreadStart(a.Sale));
Thread t2 = new Thread(new ThreadStart(a.Sale));
t1.Start();
t2.Start();
}
}两个售货员,共卖一本书,这本书一共有十本,卖完为止,我两个售货员开了两个线程,共用一个变量,变量表示还剩几本书,可是程序每次只运行两次,即每个线程只运行一次,程序就退出了,也就是只卖了两本书,为什么,求高人回答,并把程序改对.
{
public int num = 10;//共享资源
public void Sale()
{
lock (this) //同步控制
{
tmp = num;
while (tmp > 0)
{
//卖书过程
Thread.Sleep(1000);
num = num - 1;
Console.WriteLine("售出一本");
}
}
} }
class Program
{
static void Main(string[] args)
{
BookShoop a = new BookShoop();
Thread t1 = new Thread(new ThreadStart(a.Sale));
Thread t2 = new Thread(new ThreadStart(a.Sale));
t1.Start();
t2.Start();
}
}我这样改了以后,可以把书卖完,可是如果我想知道哪几本书是哪位售货员卖的,该怎么改呢?谢谢啊
t1.Name = "售货员1";
卖书时
Console.WriteLine(Thread.CurrentThread.Name + "售出一本");
可以运行成功?while(tmp>0)不是恒成立么?因为你在while里面没有修改他的值
事实上,好像Lock(this)并没有同步线程,程序运行后,还会出现多卖出一本书的情况,也就是卖出了-1本书,然后程序才退出,