我能想到的两种方法是线程安全的库可用于:使用线程安全库
一方是由一个互斥保护的图书馆,这是由主线程初始化和使用的全局实例通过工作线程,就像这样:
mutex g_lib_mutex;
lib_t g_lib;
thread:
lock(&g_lib_mutex);
/* use lib */
unlock(&g_lib_mutex);
main:
lib_init(&g_lib);
start_threads(thread);
lock(&g_lib_mutex);
/* use lib */
unlock(&g_lib_mutex);
join_threads();
lib_close(&g_lib);
其他的,是每个线程有库的本地实例,这样的事情:
thread:
lib_t g_lib;
lib_init(&g_lib);
/* use lib */
lib_close(&g_lib);
main:
start_threads(thread);
lib_t g_lib;
lib_init(&g_lib);
/* use lib */
lib_close(&g_lib);
以下哪种方式更正确/ p可借鉴?
在这两种情况下,我是否需要使用全局互斥锁来保护库调用?
我试图在多线程应用程序中使用libmysql和POSIX消息队列,当这个问题跨过我的脑海。
您是否需要/想要跨线程共享实例? – JimmyB
相关:http://stackoverflow.com/questions/11313686/using-libmysqlclient-in-multi-threaded-application – JimmyB
@HannoBinder ...我不确定,但在诸如libmysql的情况下,并非所有的调用都是线程安全,看起来像我可能需要。 – Zaxter