R: Process synchronization using file locks.

flock-package {flock} | R Documentation

## Process synchronization using file locks.

### Description

Enables synchronization between R processes using a file lock. Supports both exclusive (writer) and shared (readers) locks.

On UNIX, the implementation relies on the `fcntl` system call. While on Windows, the `LockFileEx`/`UnlockFileEx` APIs are used.

### Details

Package: | flock
Type: | Package
Version: | 0.6
Date: | 2014-11-24
License: | Apache License 2.0

### Author(s)

Ivan Popivanov

Maintainer: Ivan Popivanov <ivan.popivanov@gmail.com>

### Examples

    ## Not run:
    require(DBI)
    require(flock)
    require(RSQLite)
    require(parallel)

    dbpath <- tempfile()
    con <- dbConnect(RSQLite::SQLite(), dbname=dbpath)
    df <- data.frame(value = 0)
    dbWriteTable(con, "test", df)
    dbDisconnect(con)

    write.one.value <- function(val, lock.name=NULL) {
       if(!is.null(lock.name)) {
          file.lock = lock(lock.name)
       }

       # The three lines below are the "critical section"
       con <- dbConnect(RSQLite::SQLite(), dbname = dbpath)
       dbWriteTable(con, "test", data.frame(value = val), append = TRUE)
       dbDisconnect(con)

       if(!is.null(lock.name)) {
          unlock(file.lock)
       }
    }

    lock.name = tempfile()

    # Run the parallel database updates with two cores
    mclapply(1:100, write.one.value, mc.cores=2, lock.name=lock.name)

    # To see the failing scenario, run (on a multi-core system):
    # mclapply(1:100, write.one.value, mc.cores=2)

    ## End(Not run)

[Package flock version 0.7 Index]