线程同步实例
1
using System;
2
using System.Drawing;
3
using System.Collections;
4
using System.ComponentModel;
5
using System.Windows.Forms;
6
using System.Data;
7
// 新添加的一个命名空间。
8
using System.Threading;
9![]()
10
namespace ThreadSync
11
{
12
/// <summary>
13
/// 线程同步实例。
14
/// </summary>
15
public class Form1 : System.Windows.Forms.Form
16
{
17
private System.Windows.Forms.Label label1;
18
private System.Windows.Forms.Label label2;
19
private System.Windows.Forms.Button button1;
20
private System.Windows.Forms.Button button2;
21
private System.Windows.Forms.Label labProduce;
22
private System.Windows.Forms.Label labConsume;
23
/// <summary>
24
/// 必需的设计器变量。
25
/// </summary>
26
private System.ComponentModel.Container components = null;
27![]()
28
public Form1()
29
{
30
// Windows 窗体设计器支持所必需的
31
InitializeComponent();
32
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
33
}
34![]()
35
/// <summary>
36
/// 清理所有正在使用的资源。
37
/// </summary>
38
protected override void Dispose( bool disposing )
39
{
40
if( disposing )
41
{
42
if (components != null)
43
{
44
components.Dispose();
45
}
46
}
47
base.Dispose( disposing );
48
}
49
Windows Form Designer generated code
129![]()
130
/// <summary>
131
/// 应用程序的主入口点。
132
/// </summary>
133
[STAThread]
134
static void Main()
135
{
136
Application.Run(new Form1());
137
}
138
private ReaderWriterLock rwl = new ReaderWriterLock();
139
private Thread thdProduce = null;
140
private Thread thdConsume = null;
141
private int m_iCounter = 0;
142
// 生产者线程函数
143
private void ThreadProduce()
144
{
145
while(true)
146
{
147
rwl.AcquireWriterLock(Timeout.Infinite);
148
while(m_iCounter < 1000)
149
{
150
m_iCounter++;
151
labProduce.Text = m_iCounter.ToString();
152
Thread.Sleep(10);
153
}
154
rwl.ReleaseWriterLock();
155
}
156
}
157
// 消费者线程函数
158
private void ThreadConsume()
159
{
160
while(true)
161
{
162
rwl.AcquireReaderLock(Timeout.Infinite);
163
while(m_iCounter > 0)
164
{
165
m_iCounter--;
166
labConsume.Text = m_iCounter.ToString();
167
Thread.Sleep(10);
168
}
169
rwl.ReleaseReaderLock();
170
}
171
}
172
// 启动线程的运行。
173
private void button1_Click(object sender, System.EventArgs e)
174
{
175
button1.Enabled = false;
176
button2.Enabled = true;
177
thdProduce = new Thread(new ThreadStart(this.ThreadProduce));
178
thdConsume = new Thread(new ThreadStart(this.ThreadConsume));
179
if(thdProduce != null)
180
thdProduce.Start();
181
if(thdConsume != null)
182
thdConsume.Start();
183
}
184
// 停止线程的运行。
185
private void button2_Click(object sender, System.EventArgs e)
186
{
187
rwl.ReleaseLock();
188
if(thdProduce != null)
189
thdProduce.Abort();
190
thdProduce = null;
191
if(thdConsume != null)
192
thdConsume.Abort();
193
thdConsume = null;
194
button1.Enabled = true;
195
button2.Enabled = false;
196
}
197
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
198
{
199
rwl.ReleaseLock();
200
if(thdProduce != null)
201
thdProduce.Abort();
202
if(thdConsume != null)
203
thdConsume.Abort();
204
}
205
}
206
}
207![]()
using System;2
using System.Drawing;3
using System.Collections;4
using System.ComponentModel;5
using System.Windows.Forms;6
using System.Data;7
// 新添加的一个命名空间。8
using System.Threading;9

10
namespace ThreadSync11
{12
/// <summary>13
/// 线程同步实例。14
/// </summary>15
public class Form1 : System.Windows.Forms.Form16
{17
private System.Windows.Forms.Label label1;18
private System.Windows.Forms.Label label2;19
private System.Windows.Forms.Button button1;20
private System.Windows.Forms.Button button2;21
private System.Windows.Forms.Label labProduce;22
private System.Windows.Forms.Label labConsume;23
/// <summary>24
/// 必需的设计器变量。25
/// </summary>26
private System.ComponentModel.Container components = null;27

28
public Form1()29
{30
// Windows 窗体设计器支持所必需的31
InitializeComponent();32
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码33
}34

35
/// <summary>36
/// 清理所有正在使用的资源。37
/// </summary>38
protected override void Dispose( bool disposing )39
{40
if( disposing )41
{42
if (components != null)43
{44
components.Dispose();45
}46
}47
base.Dispose( disposing );48
}49
Windows Form Designer generated code129

130
/// <summary>131
/// 应用程序的主入口点。132
/// </summary>133
[STAThread]134
static void Main()135
{136
Application.Run(new Form1());137
}138
private ReaderWriterLock rwl = new ReaderWriterLock();139
private Thread thdProduce = null;140
private Thread thdConsume = null;141
private int m_iCounter = 0;142
// 生产者线程函数143
private void ThreadProduce()144
{145
while(true)146
{147
rwl.AcquireWriterLock(Timeout.Infinite);148
while(m_iCounter < 1000)149
{150
m_iCounter++;151
labProduce.Text = m_iCounter.ToString();152
Thread.Sleep(10);153
}154
rwl.ReleaseWriterLock();155
}156
}157
// 消费者线程函数158
private void ThreadConsume()159
{160
while(true)161
{162
rwl.AcquireReaderLock(Timeout.Infinite);163
while(m_iCounter > 0)164
{165
m_iCounter--;166
labConsume.Text = m_iCounter.ToString();167
Thread.Sleep(10);168
}169
rwl.ReleaseReaderLock();170
}171
}172
// 启动线程的运行。173
private void button1_Click(object sender, System.EventArgs e)174
{175
button1.Enabled = false;176
button2.Enabled = true;177
thdProduce = new Thread(new ThreadStart(this.ThreadProduce));178
thdConsume = new Thread(new ThreadStart(this.ThreadConsume));179
if(thdProduce != null)180
thdProduce.Start();181
if(thdConsume != null)182
thdConsume.Start();183
}184
// 停止线程的运行。185
private void button2_Click(object sender, System.EventArgs e)186
{187
rwl.ReleaseLock();188
if(thdProduce != null)189
thdProduce.Abort();190
thdProduce = null;191
if(thdConsume != null)192
thdConsume.Abort();193
thdConsume = null;194
button1.Enabled = true;195
button2.Enabled = false;196
}197
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)198
{199
rwl.ReleaseLock();200
if(thdProduce != null)201
thdProduce.Abort();202
if(thdConsume != null)203
thdConsume.Abort();204
}205
}206
}207



浙公网安备 33010602011771号