The Racket repository
![]() While `#:in-original-place? #t` provides one way to serialize foreign calls, it acts as a single lock and requires expensive context switches. Using an explicit lock can be more efficient for serializing calls across different places. For example, running "plot.scrbl" takes 70 seconds on my machine in the original place and using `#:lock-name` in any place, while it took 162 seconds in a non-main place with Cairo+Pango serialization via `#:in-original-place? #t`. Internally, the named lock combines compare-and-swap with a place channel. That strategy gives good performance in the case of no contention, and it cooperates properly with the Racket scheduler where there is contention. |
||
---|---|---|
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.travis.yml | ||
appveyor.yml | ||
INSTALL.txt | ||
Makefile | ||
README.txt |
This is the source code for the main Racket distribution. See "INSTALL.txt" for information on building Racket. License ------- Racket Copyright (c) 2010-2014 PLT Design Inc. Racket is distributed under the GNU Lesser General Public License (LGPL). This implies that you may link Racket into proprietary applications, provided you follow the rules stated in the LGPL. You can also modify Racket; if you distribute a modified version, you must distribute it under the terms of the LGPL, which in particular states that you must release the source code for the modified software. See racket/src/COPYING_LESSER.txt for more information.