我想知道如何與論壇中的吱工作smalltlak如何在吱吱喳喳的小話中使用多線程?
b1 := Ball new.
b2 := Ball new.
這2個一個對象應該在不同的線程同時運行(多線程)。 我該怎麼做?
"Thread 1"
b1 start:210 at:210. "start is the name of the method"
"Thread 2"
b2 start:310 at:210.
我想知道如何與論壇中的吱工作smalltlak如何在吱吱喳喳的小話中使用多線程?
b1 := Ball new.
b2 := Ball new.
這2個一個對象應該在不同的線程同時運行(多線程)。 我該怎麼做?
"Thread 1"
b1 start:210 at:210. "start is the name of the method"
"Thread 2"
b2 start:310 at:210.
首先,佳樂VM只提供綠色線程,即虛擬機運行在單個進程和線程模擬這一個進程中。
使用線程(簡稱過程在佳樂)你平時發送消息#fork
或#forkAt:
到塊:
[ b1 start: 210 at: 210 ] fork.
[ b1 start: 210 at: 210 ] forkAt: Processor userBackgroundPriority.
這一切就是真的,除非你需要的進程間設施通訊。然後你可以使用臨界區一個Mutex
(只有一個進程可以在一個時間本節)或控制訪問共享資源的Semaphore
:
"before critical section"
self mutex critical: [ "critical section" ].
"after critical section"
"access shared resource"
self semaphore wait.
"do stuff..."
"release shared resource"
self semaphore signal.
的方法#semaphore
和#mutex
只是存取器變量。這些變量應該是而不是被懶惰地初始化,但是之前多個進程可能會調用這些方法。這通常意味着你將在#initialize
方法初始化它們:
initialize
semaphore := Semaphore new.
mutex := Mutex new.
這樣做的原因是,你不能保證的過程不會在#ifNil:
塊暫停。這可能導致兩個進程使用兩個不同的互斥/信號量。
如果您需要更多信息,您應該查看Deep into Pharo書,也許可以閱讀由Adele Goldberg(可在您最喜愛的在線書店提供)的原始Smalltalk書籍。
而且你當然要小心你的threads and the UI之間的相互作用。
您可能不需要線程,也可以在Morphic中使用步進。
我得到一個錯誤backgroundPriority可能是什麼原因?他提供: BackgroundProcess或UserBackgroundPriority – 2Big2BeSmall
是的,對不起。這應該是'#userBackgroundPriority'。修復了答案。 –