之前學(xué)習(xí)多線程的時(shí)候,始終不能明白lock到底有毛線用。直到最近做了一個(gè)項(xiàng)目,里面有很多的線程,但是呢,這些線程都會(huì)用到同一個(gè)datatable,而且會(huì)改變這個(gè)table中的內(nèi)容。當(dāng)時(shí)我就想啊,這幾個(gè)線程都要改這張表。會(huì)不會(huì)遇到同時(shí)在改這個(gè)表里面某一行的情況。后來我機(jī)智的給每個(gè)線程都復(fù)制一張table。心想,這下大家各自改各自的,就可以啦。但是呢,就會(huì)導(dǎo)致每個(gè)線程都要改同樣的數(shù)據(jù)啊,會(huì)非常浪費(fèi)時(shí)間!直到此刻才明白,lock是多么好的朋友,它可以在一個(gè)線程修改表的時(shí)候,其他線程都不能改這張表。很有用的樣子~
lock用法:
//定義共享資源objectobj=newobject();//線程函數(shù)voidthreadFun(){lock(obj){//安全的訪問資源}}volatile 關(guān)鍵字:上面說的datatable,在定義的時(shí)候加上volatile 關(guān)鍵字可以使每個(gè)線程都能得到最新的數(shù)據(jù)。否則一個(gè)線程修改了datatable,其它線程可能還在用沒修改的數(shù)據(jù)。volatileDataTable=newDataTable();新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注