生产者 消费者 线程同步问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 07:58:00
以下的两个函数为两个线程,现在要进行同步。下面的代码正确么?
我不是很明白lock(this)的作用。
public void product()//生产者。
{
while (true)
{
lock (this)
{
if (count < max)
{
count++;
for (int i = 1; i <= max; i++ )
{
if (!list.Contains(" 商品" + i))
{
list.Enqueue(" 商品" + i);
showProduct("正在生产 商品" + i);
break;
}
}
}
else
{
showProduct("仓库满,停止生产。");
}
}

list是线程公用的对象,访问之前要锁定,只能当前线程使用, 这就是lock的作用
http://msdn.microsoft.com/zh-cn/library/c5kehkcz.aspx

很明显 有2个问题:
1.lock(this)没有对应的unlock(this).应在Thread.Sleep()函数之前加上unlock操作以释放临界区.
2.生产者生产产品有个list.Enqueue(" 商品" + i);操作
消费者消费时应有对应的拿出商品操作.