| ... | ... | @@ -114,6 +114,10 @@ to avoid using the term. |
|
|
|
- No thread can be blocked indefinitely on an MVar unless another thread holds the MVar indefinitely.
|
|
|
|
|
|
|
|
|
|
|
|
**Cooperative scheduling** describes an implementation in which it is the programmer's responsibility to insert context switch points in the code. An implementation that only provides cooperative scheduling cannot satisfy the fairness properties given above. A programmer who has access to all the code *may* be able to insert enough context switch points to satisfy fairness, but this isn't always possible.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Concurrent foreign call** means a foreign call that should run concurrently with other Haskell threads. It is a requirement of "fairness" (above) that a foreign call should not prevent other threads from making progress indefinitely. Note that we used to use the term **non-blocking foreign call** here, but that lead to confusion with "foreign calls that block", which are foreign calls that may wait indefinitely for some resource, such as reading data from a socket. "foreign calls that block" are the main reason for wanting support for concurrent foreign calls.
|
|
|
|
|
|
|
|
|
| ... | ... | |