之前学习多线程的时候,始终不能明白lock到底有毛线用。直到最近做了一个项目,里面有很多的线程,但是呢,这些线程都会用到同一个datatable,而且会改变这个table中的内容。当时我就想啊,这几个线程都要改这张表。会不会遇到同时在改这个表里面某一行的情况。后来我机智的给每个线程都复制一张table。心想,这下大家各自改各自的,就可以啦。但是呢,就会导致每个线程都要改同样的数据啊,会非常浪费时间!直到此刻才明白,lock是多么好的朋友,它可以在一个线程修改表的时候,其他线程都不能改这张表。很有用的样子~
lock用法:
//定义共享资源
object
obj=
new
object
();
//线程函数
void
threadFun()
{
lock
(obj)
{
//安全的访问资源
}
}
volatile 关键字:
上面说的datatable,在定义的时候加上volatile 关键字可以使每个线程都能得到最新的数据。否则一个线程修改了datatable,其它线程可能还在用没修改的数据。
volatile DataTable=new DataTable();