有这样一个需求,有10个资源放在一个arraylist中,有3个线程(委托的函数一样)在抢这10个资源,每个线程抢到资源后将这个资源从arraylist中除去,当arraylist中无资源后,退出。最好能有一些跑的起来的程序给我示例下,谢谢各位大侠了!
解决方案 »
- 正则表达式匹配问题
- 郁闷的问题,不可以装到C:\Program Files 目录下
- 截断字符串的问题
- 高分求工具栏图标(复制,粘贴,剪切等)
- c# winform开发中 我想把word像打印预览一样显示出来希望有高手可以不吝赐教!
- 能不能告诉我,如何分别用VB和C#打开有密码保护的WORD文档
- VS2012连接oracle错误:无法解析指定的连接标识符
- 求解!!!文字通过语音朗读出来的功能
- 各位有没有对ODBC和ADO.NET效率做个测试?
- 命名空间“Microsoft.VisualBasic”中不存在类型或命名空间名称“PowerPacks”。是否缺少程序集引用?
- 用Random类生成 随机数 怎样才能使得到的数各不不同
- 询问在VC#2008中 图表的使用
for(int i=0;i<10;i++)
{
list.Add(i);
}for(int i=0;i<3;i++)
{
Thread thread=new Thread(new ThreadStart(Start));
thread.IsBackground=true;
thread.Start();
}private void Start()
{
lock(this)
{
if(list[0]==null)
return;
string i=list[0].ToString();
list.Remove(list[0]);
}
}应该有写对吧!关键是使用lock对象,像移除,添加,更新对象等操作在多线程中,就要使用lock,保证只有线程操作该对象,这样才不会报错。
private List<string> m_lstNewText = new List<string>();
private object objLock = new object(); private void button1_Click(object sender, EventArgs e)
{
m_lstText.Clear();
m_lstNewText.Clear();
for (int i = 0; i < 100; i++)
{
m_lstText.Add(i.ToString());
} ThreadPool.QueueUserWorkItem(new WaitCallback(fun),"线程1");
ThreadPool.QueueUserWorkItem(new WaitCallback(fun), "线程2");
ThreadPool.QueueUserWorkItem(new WaitCallback(fun), "线程3");
} protected void fun(object o)
{
while (true)
{
lock (objLock)
{
if (m_lstText.Count <= 0)
break; m_lstNewText.Add(o.ToString() + " "+ m_lstText[0]);
m_lstText.RemoveAt(0);
}
}
}