2012-10-03 38 views
0

我想創建一個系統,它包含一個服務器和多個正在嘗試相互通信的客戶端。客戶端將數據放入共享內存(使用ftok/shmget創建),然後能夠將數據寫入此內存。這些包含2個獨立的程序。C++ - 進程之間共享的互斥體

服務器讀取客戶端寫入共享內存的值,並將它們寫入文件。我可以讓客戶端將數據寫入共享內存,然後服務器讀取數據,但是我無法鎖定共享內存,因此多個客戶端不能同時寫入。

我試着創建一個信號量(使用sem_open),但是這個過程之間不共享。我該如何去分享進程之間的信號量(或互斥體,因爲這些可能會更好)?

回答

2

你想用命名信號量或互斥:

int permissions = 0644; 
sem_t *shared_sem; 
unsigned int inital_value = 1; 

shared_sem = sem_open("SharedSem", O_CREAT, permissions, inital_value); 

此外,還要確保你正確設置權限。

+0

我認爲我遇到的問題是當程序結束時我的信號燈沒有被刪除。我正在打開信號量:sem_open(「lock」,O_CREAT,0644,1);但是當我之後立即讀取值時,它是0. – xur17

+0

我想通了我的問題。使用ipcs時不會列出信號量,它們位於/ dev/shm中。我還使用sem_unlink(「NAME」)添加了一個清除函數,用於取消信號量的鏈接。這解決了我的問題。 – xur17

1

使用「已命名」的信號量。 「/ someuniquename」,這兩個進程都使用它。