如何在 squeak smalltalk 中使用多线程?
how to use Multi threading in squeak smalltalk?
我想知道如何在 squeak 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.
首先,Squeak VM 仅提供绿色线程,即 VM 在单个进程中运行,线程在该单个进程内模拟。
要使用线程(在 Squeak 中简称为 processes),通常将消息 #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
只是变量的访问器。这些变量应该 not 延迟初始化,但是 before 多个进程可以调用这些方法。这通常意味着您将在 #initialize
方法中初始化它们:
initialize
semaphore := Semaphore new.
mutex := Mutex new.
原因是你不能保证一个进程不会在#ifNil:
块中被挂起。这可能会导致两个进程使用两个不同的互斥量/信号量。
如果您需要更多信息,您应该看看 Deep into Pharo 这本书,也许还可以阅读 Adele Goldberg 的 Smalltalk 原著(可在您最喜欢的在线书店购买)。
您当然应该注意 threads and the UI.
之间的互动
你可能不需要线程,你也可以在 Morphic 中使用步进。
我想知道如何在 squeak 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.
首先,Squeak VM 仅提供绿色线程,即 VM 在单个进程中运行,线程在该单个进程内模拟。
要使用线程(在 Squeak 中简称为 processes),通常将消息 #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
只是变量的访问器。这些变量应该 not 延迟初始化,但是 before 多个进程可以调用这些方法。这通常意味着您将在 #initialize
方法中初始化它们:
initialize
semaphore := Semaphore new.
mutex := Mutex new.
原因是你不能保证一个进程不会在#ifNil:
块中被挂起。这可能会导致两个进程使用两个不同的互斥量/信号量。
如果您需要更多信息,您应该看看 Deep into Pharo 这本书,也许还可以阅读 Adele Goldberg 的 Smalltalk 原著(可在您最喜欢的在线书店购买)。
您当然应该注意 threads and the UI.
之间的互动你可能不需要线程,你也可以在 Morphic 中使用步进。