目的:
设置一个时间后,马上读取,然后再设置一个时间,再读取……循环进行
运行结果有问题:(如下)
t1 started
set time i0
set time i1
t2 started
………………
………………
set time i0完了应该是 “read time is……“啊,怎么会出现这种情况呢?
一般大家都是用什么方法解决“生产者消费者问题啊”
using System;
using System.Net;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Threading;
using System.Runtime.InteropServices;
public class k
{
private object time = new object();
private DateTime lastSendTime;
int i = 0;
AutoResetEvent objEvent = new AutoResetEvent(true);
AutoResetEvent objEvent1 = new AutoResetEvent(true);
//访问lastSendTime的唯一方法
public DateTime LastSendTime
{
get
{
lock(time)
{
return this.lastSendTime;
}
}
set
{
lock(time)
{
this.lastSendTime = value;
}
}
}
public void init()
{
Thread thread1 = new Thread(new ThreadStart(testT1));
Thread thread2 = new Thread(new ThreadStart(testT2));
thread1.Start();
thread2.Start();
}
private void testT1()
{
Console.WriteLine("t1 started");
while(i<100)
{
LastSendTime = DateTime.Now;
Console.WriteLine("set time i" + i++);
objEvent.Set();
objEvent1.WaitOne();
}
//objEvent.Set();
Console.WriteLine("over!!!!!");
}
private void testT2()
{
Console.WriteLine("t2 started");
while(true)
{
objEvent.WaitOne();
int a = 0;
while(a<20000000)
{
a ++;
}
Console.WriteLine("read time is" + LastSendTime.ToString() + i);
objEvent1.Set();
}
}
}
public class kw
{
k asd;
public kw()
{
asd = new k();
}
public static void Main(string [] args)
{
kw k = new kw();
k.asd.init();
}
}
设置一个时间后,马上读取,然后再设置一个时间,再读取……循环进行
运行结果有问题:(如下)
t1 started
set time i0
set time i1
t2 started
………………
………………
set time i0完了应该是 “read time is……“啊,怎么会出现这种情况呢?
一般大家都是用什么方法解决“生产者消费者问题啊”
using System;
using System.Net;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Threading;
using System.Runtime.InteropServices;
public class k
{
private object time = new object();
private DateTime lastSendTime;
int i = 0;
AutoResetEvent objEvent = new AutoResetEvent(true);
AutoResetEvent objEvent1 = new AutoResetEvent(true);
//访问lastSendTime的唯一方法
public DateTime LastSendTime
{
get
{
lock(time)
{
return this.lastSendTime;
}
}
set
{
lock(time)
{
this.lastSendTime = value;
}
}
}
public void init()
{
Thread thread1 = new Thread(new ThreadStart(testT1));
Thread thread2 = new Thread(new ThreadStart(testT2));
thread1.Start();
thread2.Start();
}
private void testT1()
{
Console.WriteLine("t1 started");
while(i<100)
{
LastSendTime = DateTime.Now;
Console.WriteLine("set time i" + i++);
objEvent.Set();
objEvent1.WaitOne();
}
//objEvent.Set();
Console.WriteLine("over!!!!!");
}
private void testT2()
{
Console.WriteLine("t2 started");
while(true)
{
objEvent.WaitOne();
int a = 0;
while(a<20000000)
{
a ++;
}
Console.WriteLine("read time is" + LastSendTime.ToString() + i);
objEvent1.Set();
}
}
}
public class kw
{
k asd;
public kw()
{
asd = new k();
}
public static void Main(string [] args)
{
kw k = new kw();
k.asd.init();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货