Advertisement
Gistrec

Shared Mutex C

Mar 18th, 2019
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/wait.h>
  5. #include <sys/stat.h>
  6. #include <stdlib.h>
  7. #include <assert.h>
  8. #include <fcntl.h>
  9. #include <sys/mman.h>
  10. #include <pthread.h>
  11.  
  12.  
  13. static pthread_mutex_t* shered_mutex = NULL;
  14.  
  15. void initialise_shared() {
  16.     // Помещаем данные в общую память
  17.     int prot = PROT_READ | PROT_WRITE;
  18.     int flags = MAP_SHARED | MAP_ANONYMOUS;
  19.     shered_mutex = (pthread_mutex_t *) mmap(NULL, sizeof(pthread_mutex_t), prot, flags, -1, 0);
  20.     assert(shered_mutex && "Не удалось создать общую память");
  21.  
  22.     // Инициализируем мьютекс, чтобы он работал правильно в общей памяти
  23.     pthread_mutexattr_t attr;
  24.     pthread_mutexattr_init(&attr);
  25.     pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
  26.     pthread_mutex_init(shered_mutex, &attr);
  27. }
  28.  
  29.  
  30.  
  31.  
  32. int main() {
  33.     initialise_shared();
  34.  
  35.  
  36.     pthread_mutex_lock(shered_mutex);
  37.     pthread_mutex_unlock(shered_mutex);
  38.  
  39.  
  40.     munmap(shered_mutex, sizeof(shered_mutex));
  41.     return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement