我必须编写一个线程安全的库,它使用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