interlocked
使用於遞增、遞減以及更改變數值這類較為簡單的操作。如果所有的任務都是在同步上下文中的一些簡單操作,那麼
interlocked
類作為乙個非常便捷的方法,可以大大減少需要編寫的**量。筆者沒有在如下的試例程式中沒有感覺到它的功用,當然
也不排除筆者技術有限未能理解到設計者的心思。
例子8:
using
system;
using
system.collections.generic;
using
system.text;
using
system.threading;
namespace
else
thread.sleep(500);
console.writeline("current thread is ,the value of i is ", thread.currentthread.name, i);
} }
class
mainentrypoint1
", n);
mythread.start();
} console.readline();
} }
} 當乙個執行緒處在更改變數值的過程中,另乙個執行緒也要更改該變數的值或需要讀取變數值,就會出現同步的問題,前文中已介紹了這些同步技術都用當乙個執行緒執行受保護的**部分時,就會阻塞其它執行緒對這部分的操作。但如果所有的執行緒都只讀取這個資源,而不改變它的時候,這樣做其實是沒有必要與浪費時間的。在。
net中用無等待讀取來提供這方面的功能。例子9
:using
system;
using
system.collections.generic;
using
system.text;
using
system.threading;
namespace
finally
}catch (exception )
} }
protected
void threadtwomethod()
finally
}catch (exception)
thread.sleep(1);
} }
public
int readerblocks
} public
int writeerblocks
} static
void
main
()
,writer blocks ",exampleclass.readerblocks,exampleclass.writeerblocks);
system.console.read();
} }
} 執行緒池是可以用來在後台執行多個任務的執行緒集合。它的提出主要是因為有很多執行緒是在某一事件被觸發之後才發生的,在這一事件發生之前這是處於休眠或者是等待狀態,而在它的觸發事件之後,它可以得到執行,執行完成以後,又進入休眠狀態。
waitcallback
表示執行緒池要執行的**方法。語法如下:
waitcallback [mycallback]=new waitcallback([threadpoolworkerthreadmethod]);
它的語法與
threadstart
差不多,但它委託的事件有一引數,它委託的事件的申明如下:
例子10
:static void threadpoolworkerthreadmethod
(object[stateobject]
)
[stateobject]
是乙個狀態物件,能夠將資訊傳遞給輔助線程。
using
system;
using
system.collections.generic;
using
system.text;
using
system.threading;
namespace
public
static
void threadproc(object stateinfo)
} }
要使用執行緒池,就要先要呼叫
threadpool.queueuserworkitem
方法將工作項加入佇列。語法:
threadpool.queueuserworkitem(new waitcallback(threadpoolthreadmethod));
例程11
:using
system;
using
system.collections.generic;
using
system.text;
using
system.threading;
namespace
queing the work item.");
threadpool.queueuserworkitem(new
waitcallback(threadpoolthreadmethod));
console.writeline(" press the 'enter' key t exit the process.");
console.readline();
console.writeline(" exiting the process.");
} static
void threadpoolthreadmethod(object stateobject)
hello thread pool.");
console.readline();
} }
}threadpool
建構函式使用乙個
waitcallback
委託作為引數,利用這個引數可以向
threadpool
傳遞任意狀態或資訊,從而傳遞給執行緒方法。
例程12:
using
system;
using
system.collections.generic;
using
system.text;
using
system.threading;
namespace
queuing the work item.");
threadpool.queueuserworkitem(new
waitcallback(threadpoolthreadmethod),"this is a state message");
console.writeline(" press the 'enter' key to exit the process.");
console.read();
} static
void threadpoolthreadmethod(object stateobject)
the data passed in is '"+stateobject.tostring()+"'");
} }
}
c 多執行緒程式設計筆記2
同步的意思是在多執行緒程式中,為了使兩個或多個執行緒之間,對分配臨界資源的分配問題,要如何分配才能使臨界資源在為某一線程使用的時候,其它執行緒不能再使用,這樣可以有效地避免死鎖與髒資料。髒資料是指兩個執行緒同時使用某一資料,造成這個資料出現不可預知的狀態!在 c 中,對執行緒同步的處理有如下幾種方法...
筆記 C 多執行緒程式設計(2)
拒絕自閉vs2010版本,不支援該標頭檔案 include事先說明 1.一般來說,子執行緒也要從乙個函式開始執行,所以建立乙個執行緒的同時,我們要宣告乙個函式 2.一般情況下,主線程執行完畢後,未完成的子執行緒會被系統強行關閉 方法一 宣告函式 首先宣告乙個子執行緒的函式,其次在主線程中定義乙個th...
C 多執行緒程式設計學習筆記
建立執行緒 void fun 執行緒函式 thread t1 fun t1.join join 是兩個執行緒交匯的意思,工作執行緒和主線程在此處交匯,jion 之後的主線程會阻塞直到工作執行緒執行結束。detach 使執行緒函式脫離執行緒物件,即當執行緒物件銷毀了執行緒函式依然可能執行。通常不推薦這...