请大侠帮帮忙了,谢谢:
我想要多个读线程执行一次,然后一个写线程执行一次,再多个读线程执行一次,然后一个写线程执行一次,这样一直轮回。
用ReaderWriterLock 可以实现,但是用ReaderWriterLockSlim的时候却做不到。
比如下面的代码:
namespace lock1
{
public partial class Form1 : Form
{
static int theResource = 0;
//static ReaderWriterLock rwl = new ReaderWriterLock();
private ReaderWriterLockSlim rwl = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
Thread t1 = new Thread(new ParameterizedThreadStart(myread)); //线程
Thread t2 = new Thread(new ParameterizedThreadStart(myread)); //线程
Thread t3 = new Thread(new ParameterizedThreadStart(myread)); //线程
Thread t4 = new Thread(new ParameterizedThreadStart(myread)); //线程
Thread t5 = new Thread(new ParameterizedThreadStart(myread)); //线程
Thread t6 = new Thread(new ParameterizedThreadStart(myread)); //线程
Thread t7 = new Thread(new ThreadStart(mywrite));
t1.Start(1);
t2.Start(2);
t3.Start(3);
t4.Start(4);
t5.Start(5);
t6.Start(6);
t7.Start();
}
private void myread(object o)
{
int i = (int)o;
while (true)
{
// rwl.AcquireReaderLock(-1); //无论花费多长时间,线程都会一直等到获得锁为止
rwl.TryEnterReadLock(-1);
//Thread.Sleep(100);
listBox1.Items.Insert(0, i.ToString() + "号 读线程 :" + theResource.ToString());
rwl.ExitReadLock();
// rwl.ReleaseReaderLock();
Thread.Sleep(10);
}
}
private void mywrite()
{
while (true)
{
// rwl.AcquireWriterLock(-1); //无论花费多长时间,线程都会一直等到获得锁为止
rwl.TryEnterWriteLock(-1);
theResource++;
listBox1.Items.Insert(0, "---------------------写");
Thread.Sleep(1000);
rwl.ExitWriteLock();
// rwl.ReleaseWriterLock();
Thread.Sleep(10);
}
}
}
}
我是想要这样的效果:

------解决思路----------------------
编写多线程程序,你这里走的是“编程大忌”的路数。良好的多线程的程序不是这样设计的。
1. 过程中不会有死循环,同时也轻易不会有(信号量)阻塞。
2.. T1~T6执行完毕,才会执行T7。同样T7执行完毕之后,才会启动T1(2)~T6(2)。而且启动的新线程是从系统线程池中自动分配的,而不是你事先阻塞6个线程在那里。