[英]synchronization between processes using unnamed semaphores
在process-1
我試圖將數據寫入共享內存。 同時在process-2
我從同一共享內存中讀取數據。 在這種情況下,我需要在這兩個過程之間提供同步。 如果我要通過未命名的信號燈(使用shm_init(),mmap()
),是否可以使用?
我已經編寫了這樣的代碼,不管行不行?
fd = shm_open("shm_name", O_CREAT| O_RDWR, S_IRUSR | S_IWUSR);
sema = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE,MAP_SHARED , fd, 0);
sem_init(sema, 1, 1);
一般方法將起作用。 但是請注意以下幾點:
shm_open(3)
的name
參數應以斜杠開頭。 改為傳遞"/shm_name"
。 (在具有glibc的Linux上,它可以在沒有斜線IIRC的情況下正常工作。) ftruncate(2)
調整fd
大小,否則當您嘗試訪問共享內存時將獲得SIGBUS
。 每當您mmap(2)
一個文件時,您在映射中訪問的任何內存實際上都必須存在於該文件中,並且POSIX共享內存對象的工作方式相同。 (在Linux上,它們被實現為/dev/shm
下的文件,該文件使用內存中的tmpfs 。) 對於后者,您可以執行以下操作:
typedef struct Shared_mem {
sem_t sem;
int shared_data[100];
} Shared_mem;
...
shared_mem = mmap(NULL, sizeof(Shared_mem), PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
...
sem_init(&shared_mem->sem, 1, 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.