The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The goal of semaphore is to enable synchronization of concurrent R processes.
Implements named semaphores from the Boost C++ library for interprocess communication. Multiple R sessions on the same host can block (with optional timeout) on a semaphore until it becomes positive, then atomically decrement it and unblock. Any session can increment the semaphore.
Semaphores are managed by the operating system, and can be used to synchronize a mixture of R sessions and other types of processes if needed.
Works cross-platform, including Windows, MacOS, and Linux.
# Install the latest stable version from CRAN:
install.packages("semaphore")
# Or the development version from GitHub:
install.packages("pak")
::pak("cmmr/semaphore") pak
library(semaphore)
<- create_semaphore()
s print(s)
#> [1] "uUkKpNMbTVgaborHG4rH"
increment_semaphore(s)
decrement_semaphore(s, wait = 10) # wait up to ten seconds
#> [1] TRUE
decrement_semaphore(s, wait = FALSE) # return immediately
#> [1] FALSE
remove_semaphore(s)
#> [1] TRUE
Open two separate R sessions on the same machine.
Session 1 - Producer
library(semaphore)
<- 'mySemaphore'
s
create_semaphore(s)
# enable session 2 to output 'unblocked!' three times
increment_semaphore(s)
increment_semaphore(s)
increment_semaphore(s)
remove_semaphore(s)
Session 2 - Consumer
library(semaphore)
<- 'mySemaphore'
s
for (i in 1:3) {
# Block until session 1 increments the semaphore
decrement_semaphore(s, wait = TRUE)
# Do some work
message('unblocked!')
}
message('finished')
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.