document Windows embedding requirement when parallelism is enabled
merge to v5.0
This commit is contained in:
parent
6f733e96b7
commit
f91836e311
|
@ -653,6 +653,12 @@ Like @cpp{scheme_malloc}, but in 3m, the type tag determines how the
|
||||||
Like @cpp{scheme_malloc}, but in 3m, pointers are allowed to
|
Like @cpp{scheme_malloc}, but in 3m, pointers are allowed to
|
||||||
reference the middle of the object; see @secref["im:memoryalloc"].}
|
reference the middle of the object; see @secref["im:memoryalloc"].}
|
||||||
|
|
||||||
|
@function[(void* scheme_malloc_atomic_allow_interior
|
||||||
|
[size_t n])]{
|
||||||
|
|
||||||
|
Like @cpp{scheme_malloc_atomic}, but in 3m, pointers are allowed to
|
||||||
|
reference the middle of the object; see @secref["im:memoryalloc"].}
|
||||||
|
|
||||||
@function[(char* scheme_strdup
|
@function[(char* scheme_strdup
|
||||||
[char* str])]{
|
[char* str])]{
|
||||||
|
|
||||||
|
@ -807,6 +813,21 @@ difference between the actual stack start and the reported stack base,
|
||||||
in addition to the margin needed for detecting and handling stack
|
in addition to the margin needed for detecting and handling stack
|
||||||
overflow.}
|
overflow.}
|
||||||
|
|
||||||
|
@function[(void scheme_register_tls_space
|
||||||
|
[void* ptr]
|
||||||
|
[int tls_index])]{
|
||||||
|
|
||||||
|
Only available under Windows; registers @var{ptr} as the address of a
|
||||||
|
thread-local pointer variable that is declared in the main
|
||||||
|
executable. The variable's storage will be used to implement
|
||||||
|
thread-local storage within the Racket run-time. See
|
||||||
|
@secref["embedding"].
|
||||||
|
|
||||||
|
The @var{tls_index} argument must be @cpp{0}. It is currently
|
||||||
|
ignored, but a future version may use the argument to allow
|
||||||
|
declaration of the thread-local variable in a dynamically linked
|
||||||
|
DLL.}
|
||||||
|
|
||||||
@function[(void scheme_register_static
|
@function[(void scheme_register_static
|
||||||
[void* ptr]
|
[void* ptr]
|
||||||
[long size])]{
|
[long size])]{
|
||||||
|
|
|
@ -359,7 +359,23 @@ To embed Racket CGC in a program, follow these steps:
|
||||||
@cppi{scheme_basic_env} and passing the result to the function
|
@cppi{scheme_basic_env} and passing the result to the function
|
||||||
provided to @cpp{scheme_main_setup}. (The
|
provided to @cpp{scheme_main_setup}. (The
|
||||||
@cpp{scheme_main_stack_setup} trampoline registers the C stack with
|
@cpp{scheme_main_stack_setup} trampoline registers the C stack with
|
||||||
the memory manager without creating a namespace.)}
|
the memory manager without creating a namespace.)
|
||||||
|
|
||||||
|
Under Windows, when support for parallelism is enabled in the Racket
|
||||||
|
build (as is the default), then before calling
|
||||||
|
@cpp{scheme_main_setup}, your embedding application must first call
|
||||||
|
@cppi{scheme_register_tls_space}:
|
||||||
|
|
||||||
|
@verbatim[#:indent 2]{
|
||||||
|
scheme_register_tls_space(&tls_space, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
where @cpp{tls_space} is declared as a thread-local pointer variable
|
||||||
|
in the main executable (i.e., not in a dynamically linked DLL):
|
||||||
|
|
||||||
|
@verbatim[#:indent 2]{
|
||||||
|
static __declspec(thread) void *tls_space;
|
||||||
|
}}
|
||||||
|
|
||||||
@item{Configure the namespace by adding module declarations. The
|
@item{Configure the namespace by adding module declarations. The
|
||||||
initial namespace contains declarations only for a few primitive
|
initial namespace contains declarations only for a few primitive
|
||||||
|
|
Loading…
Reference in New Issue
Block a user