首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

多线程同步有关问题 LOCK

2012-09-20 
多线程同步问题 LOCK初次接触多程序同步, 很是头疼, 望各位前辈帮帮小弟, 先谢了C# codenamespace ThreadD

多线程同步问题 LOCK
初次接触多程序同步, 很是头疼, 望各位前辈帮帮小弟, 先谢了

C# code
namespace ThreadDemo{    public partial class Form1 : Form    {        private Yan y = new Yan();        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            Thread t1 = new Thread(T1);            t1.Name = "t1";            Thread t2 = new Thread(T2);            t2.Name = "t2";            t1.Start();            t2.Start();        }        private void T1()        {            lock (y)            {                for (int i = 0; i < 10000000; ++i) ;                y.str = "先";                MessageBox.Show(y.str);            }                     }        private void T2()        {            y.str = "后";            MessageBox.Show(y.str);        }    }    public class Yan    {        public string str = "";    }}


我让他先弹出“先”, 然后再弹出“后”, 怎么搞?

求解, 谢谢!!!

[解决办法]
呵呵,你用的是lock,相当于临界区,临界区无法做到控制线程执行的先后次序,只能控制两段代码不同时运行,
[解决办法]
可以使用Event之类的
[解决办法]
而且你在T2中也没有lock(y)这是不对的,凡是修改共享资源都要lock,要控制线程先后,你这个需求最简单的方法是用ManualResetEvent控制,当然信号量也可以,

ManualResetEvent manualEvent=new ManualResetEvent(false);

private void T1()
{
lock (y)
{
for (int i = 0; i < 10000000; ++i) ;
y.str = "先";
MessageBox.Show(y.str);
}
manualEvent.Set();

}

private void T2()
{
manualEvent.WaitOne();

lock(y)
{
y.str = "后";
MessageBox.Show(y.str);
}
}

热点排行