From: Gustavo Martin Morcuende Date: Sun, 29 May 2016 19:00:36 +0000 (+0200) Subject: locks X-Git-Url: https://git.gumartinm.name/?a=commitdiff_plain;h=22b810c51e388d9e60b61818b993293b8f572e94;p=CForFun.git locks --- diff --git a/locks/Makefile b/locks/Makefile index dd83236..0a216ce 100644 --- a/locks/Makefile +++ b/locks/Makefile @@ -1,8 +1,7 @@ all: locks locks: locks.c - mkdir -p bin/ - gcc -Wall -g -o bin/locks locks.c -lpthread + gcc -Wall -g -o locks locks.c -lpthread clean: rm -f locks diff --git a/locks/README b/locks/README new file mode 100644 index 0000000..96b2e25 --- /dev/null +++ b/locks/README @@ -0,0 +1,14 @@ +flockfile: + implementado por glibc NO por el kernel + es hilo seguro + este lock es incompatible con flock o fcntl + solo sirve a nivel de proceso, NO ENTRE PROCESOS. Simplemente tiene un contador asociado al file descriptor abierto, este contador está en memoria y no se comparte entre procesos + +flock: + no es hilo seguro!!! Si dos hilos del mismo proceso intentan coger el mismo file lock pueden fallar :( + flock es asociado con proceso pero parece funcionar también con hilos pero como no es hilo seguro supongo que puede dar problemas :/ + http://stackoverflow.com/questions/9462532/multiple-threads-able-to-get-flock-at-the-same-time + +fcntl: + solo funciona con procesos + no es hilo seguro diff --git a/locks/locks.c b/locks/locks.c index 0eb34b7..8cb6252 100644 --- a/locks/locks.c +++ b/locks/locks.c @@ -145,12 +145,12 @@ void *thread_lock(void * arg) { threadNumber = (int) arg; - gate(); - fd = open(fileName, O_CREAT | O_RDWR, 0664); if (fd == -1) { print_with_date (stderr, "Thread %d, open file error", threadNumber, strerror(errno)); } + + gate(); print_with_date (stdout, "Thread %d: before lock\n", threadNumber); do {