locks
authorGustavo Martin Morcuende <gu.martinm@gmail.com>
Sun, 29 May 2016 19:00:36 +0000 (21:00 +0200)
committerGustavo Martin Morcuende <gu.martinm@gmail.com>
Sun, 29 May 2016 19:00:36 +0000 (21:00 +0200)
locks/Makefile
locks/README [new file with mode: 0644]
locks/locks.c

index dd83236..0a216ce 100644 (file)
@@ -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 (file)
index 0000000..96b2e25
--- /dev/null
@@ -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
index 0eb34b7..8cb6252 100644 (file)
@@ -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 {