我必須編寫一個線程安全的庫,它使用POSIX信號量(用作具有初始值= 1的互斥量)進行同步。我發現一些問題來正確管理異步信號。我有一個應用程序鏈接到這個靜態庫和應用程序(多線程)調用庫函數。訪問一些內部結構是由POSIX信號控制(這是內部的庫):如何在多線程應用程序中用異步信號管理共享的POSIX信號量
void library_func1(lib_handler *h)
{
sem_wait(sem);
/* do some stuff with global data */
sem_post(sem);
}
void library_func2(lib_handler *h)
{
sem_wait(sem);
/* do some stuff with global data */
sem_post(sem);
}
void library_close(lib_handler *h)
{
...
}
追加什麼,如果一個異步信號,讓我們說SIGINT
,提高當一個線程鎖定該信號?如果我重新啓動應用程序,我會產生死鎖,因爲信號量存在,它的值是0
。有一個函數library_close
可以在異步信號提出時釋放信號量,但哪種方法是最好的方法來執行和檢查(我認爲只有在後面跟着exit
,該函數纔會是信號安全的)?在多線程應用程序中,對於所有信號來說,通常都有一個單線程管理器的好習慣:這個線程應該在庫中或可以在應用程序中啓動它?
謝謝大家。
信號量在應用程序之間共享。 – MirkoBanchi
如何?你使用某種類型的進程間通信方案嗎? – insomniac2846
POSIX信號量可通過例如'/ dev/shm'進行訪問,因此在進程間共享。 – MirkoBanchi